递归查找目录中的所有文本文件

asi*_*mes 2 java recursion java-io

我试图获取目录中所有文本文件的名称.如果目录有子目录,那么我也想在那些文件中获取任何文本文件.我不知道如何让任何数量的子目录继续进行.

现在,下面的代码只获取当前目录中的所有文本文件以及目录中的子目录.对于找到的每个子目录,它还会查找任何文本文件和更深层次的子目录.问题是如果那些更深层次的子目录还有更深层次的子目录,那么我找不到所有的文本文件.这似乎是一个需要递归的问题,因为我不知道这会有多深.

到目前为止,这是我的代码:

File rootDirectory = new File(rootDir);
if (rootDirectory.isDirectory()) {
    System.out.println("Valid directory");

    File[] listOfFiles = rootDirectory.listFiles(); 
    for (int i = 0; i < listOfFiles.length; i++) {
        String iName = listOfFiles[i].getName();
        if (listOfFiles[i].isFile()) {
            if (iName.endsWith(".txt") || iName.endsWith(".TXT")) {
                System.out.println("File: "+iName);
            }
        }
        if (listOfFiles[i].isDirectory()) {
            System.out.println("Directory: "+iName);

            File[] subList = listOfFiles[i].listFiles();
            for (int j = 0; j < subList.length; j++) {
                String jName = subList[j].getName();
                if (subList[j].isFile()) {
                    if (jName.endsWith(".txt") || jName.endsWith(".TXT")) {
                        System.out.println("\tFile: "+jName);
                    }
                }
                if (subList[j].isDirectory()) {
                    System.out.println("\tDirectory: "+jName);
                }
            }
        }
    }
}
else System.out.println("Invalid directory");
Run Code Online (Sandbox Code Playgroud)

编辑:搞定了,谢谢Olaf Dietsche:

public void findFiles(File root, int depth) {
    File[] listOfFiles = root.listFiles();
    for (int i = 0; i < listOfFiles.length; i++) {
        String iName = listOfFiles[i].getName();
        if (listOfFiles[i].isFile()) {
            if (iName.endsWith(".txt") || iName.endsWith(".TXT")) {
                for (int j = 0; j < depth; j++) System.out.print("\t");
                System.out.println("File: "+iName);
            }
        }
        else if (listOfFiles[i].isDirectory()) {
            for (int j = 0; j < depth; j++) System.out.print("\t");
            System.out.println("Directory: "+iName);
            findFiles(listOfFiles[i], depth+1);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ola*_*che 8

这是一个递归问题

public void find_files(File root)
{
    File[] files = root.listFiles(); 
    for (File file : files) {
        if (file.isFile()) {
            ...
        } else if (file.isDirectory()) {
            find_files(file);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)