【问题标题】:Converting working code into a recursive method将工作代码转换为递归方法
【发布时间】:2013-11-02 13:11:52
【问题描述】:

大家好,我需要创建一种方法来显示当前目录、文件、子目录以及给定用户必须选择的文件的这些子目录的文件。我完成了任务,下面的代码正在打印适当的输出。它是从 f.getParentFile() 向下打印的,这就是想要的。现在我想改用递归。我正在尝试学习递归的概念。我知道你需要一个基本案例,然后是你的归纳步骤,但是当我尝试将我的代码修改为递归时,当它到达第一个子目录时,我会得到一个无限循环。任何反馈将不胜感激。

非递归工作代码

static void listFiles(File f)
{
    try
    {
        if (f.exists())
        {
            File dir = f.getParentFile();

            if (dir.isDirectory())
            {
                System.out.println("Directory:  " + dir );

                File[] list = dir.listFiles();
                for (int i = 0; i < list.length; i++)
                {
                    if (list[i].isDirectory())
                    {
                        System.out.println("\tSubdirectory:  " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB" );
                        File[] listFiles = list[i].getAbsoluteFile().listFiles();
                        for (int j = 0; j < listFiles.length; j++)
                        {
                            System.out.println("\t\tSubdirectory files:  " + listFiles[j].getName() + "\tsize :" + (listFiles[j].length()/1024) + "KB" );
                        }
                    }
                    else if (list[i].isFile())
                    {
                        System.out.println("\tFiles:  " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB" );
                    }
                }
            }
        }
        else throw new FileNotFoundException("File ******** does not exists");
    }
    catch(NullPointerException | FileNotFoundException e)
    {
        e.printStackTrace();
    }
}

尝试递归

static void listFiles(File f)
{
    try
    {
        if (f.exists())
        {
            File dir = f.getParentFile();

            if (dir.isDirectory())
            {
                System.out.println("Directory:  " + dir );

                File[] list = dir.listFiles();
                for (int i = 0; i < list.length; i++)
                {
                    if (list[i].isDirectory())
                    {
                        System.out.println("\tSubdirectory:  " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB" );
                        listFiles(list[i].getAbsoluteFile());
                    }
                    else if (list[i].isFile())
                    {
                        System.out.println("\tFiles:  " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB" );
                    }
                }
            }
        }
        else throw new FileNotFoundException("File ******** does not exists");
    }
    catch(NullPointerException | FileNotFoundException e)
    {
        e.printStackTrace();
    }
}

【问题讨论】:

  • 如果你想学习递归,从更简单的开始,比如阶乘。

标签: java recursion subdirectory


【解决方案1】:

真的很简单:)

public static void main(String[] args) {
    filesInFolder("./");
}

public static void filesInFolder(String filename) {
    File dir = new File(filename);        
    for (File child : dir.listFiles()) {
        System.out.println(child.getAbsolutePath());
        if (child.isDirectory()){
            filesInFolder(child.getAbsolutePath());
        }
    }
}

【讨论】:

    猜你喜欢
    • 2021-08-09
    • 2021-02-11
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    相关资源
    最近更新 更多