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

时间:2017-01-29 18:48:12

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

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

1 个答案:

答案 0 :(得分:5)

您应该使用File.isDirectory()方法。像这样:

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

        for (File file : subDirectories) {
            printAllJavaFiles(file);
        }
    }else {
        printFile(directory);
    }
}

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

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