java - 将工作代码转换为递归方法

标签 java recursion subdirectory

大家好,我需要创建一个方法来显示当前目录、文件、子目录以及这些子目录的文件(给定用户必须选择的文件)。我完成了任务,下面的代码正在打印适当的输出。它是从 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();
    }
}

最佳答案

这真的很简单:)

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());
        }
    }
}

关于java - 将工作代码转换为递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19555589/

相关文章:

java - 在实际 Java 程序中使用 IPv6

.htaccess - Codeigniter 2.1.4安装在子目录中

java - ExecutorService没有性能增益递归行列式Java

reactjs - 如何使用 AWS Load Balancer 在子目录中部署 React 应用程序

javascript - 子文件夹中未设置 cookie

java - 可以添加到 PreparedStatement Batch Update 的参数集的最大数量是多少?

java - 如何用三角形绘制3D地形?

java - 如何在非 GUI 服务器环境中运行 libGDX 应用程序?

c - 链接列表反向递归功能不起作用

python - 在指定的分离度内交 friend