Java递归打印目录子目录文件

Lit*_*cas -1 java recursion

我正在尝试遍历文件夹并列出特定文件结尾的所有文件.我试图用递归方法解决这个问题,但我没有得到任何地方.

private int counter = 0;
public void printAllJavaFiles(File directory) {
        printFile(directory);
        File[] subDirectories = directory.listFiles();

        for (File file : subDirectories) {
            printAllJavaFiles(file);
        }
}

private void printFile(File file) {
    // Get file extension
    String fileExtension = "";
    int i = file.getName().lastIndexOf('.');
    if (i >= 0) {
        fileExtension = file.getName().substring(i + 1);
    }

    if (fileExtension.equals("java")) {
        System.out.println("File: " + file.getName() + " Size: " + file.length());
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么建议?我真的不知道如何在目录结构中上下移动.它只是进入第一个文件夹,一旦它完成列出它的文件,它会抛出一个nullpointerexception.

nho*_*er9 5

你应该使用这种File.isDirectory()方法.像这样:

public void printAllJavaFiles(File directory) {
    if (directory.isDirectory()) {
        File[] subDirectories = directory.listFiles();

        for (File file : subDirectories) {
            printAllJavaFiles(file);
        }
    }else {
        printFile(directory);
    }
}
Run Code Online (Sandbox Code Playgroud)

有关该方法的文档:https://docs.oracle.com/javase/7/docs/api/java/io/File.html#isDirectory()

我们的想法是,对于每个文件,检查它是否是文件夹,如果是,请进行递归调用.如果没有,只需打印文件即可.