java - 当你想在java中使用listfiles时,如果你没有权限,如何跳过文件?

标签 java recursion

使用下面的代码,我打印所有子目录,但如果我无法访问其中一个子目录,则此代码将中断并返回错误。

如何修复它?

public static void main(String... args) {
    File[] files = new File("C:/").listFiles();
    showFiles(files);
}

public static void showFiles(File[] files) {
for (File file : files) {
    if (file.isDirectory()) {
        System.out.println("Directory: " + file.getName());
        showFiles(file.listFiles()); // Calls same method again.
    } else {
        System.out.println("File: " + file.getName());
    }
 }
}

最佳答案

参见Javadoc对于 listFiles 关于它返回的内容:

The array will be empty if the directory is empty. Returns null if this abstract pathname does not denote a directory, or if an I/O error occurs.

为了使您的代码安全,请执行以下操作:

public static void showFiles(File[] files) {
    for (File file : files) {
        if (file.isDirectory()) {
            System.out.println("Directory: " + file.getName());
            try {
                File[] dirFiles = file.listFiles();
                if (dirFiles == null) {
                    System.out.println("Not a directory, or I/O error: " + file.getName());
                }
                else if (dirFiles.length == 0) { //simple recursion would not recognize this case
                    System.out.println("Directory is empty: " + file.getName());
                }
                else {
                    showFiles(dirFiles); // Calls same method again.
                }
            }
            catch (SecurityException exc) {
                System.out.println("SecurityException with: " + file.getName());
            }
        }
        else {
            System.out.println("File: " + file.getName());
        }
    }
}

关于java - 当你想在java中使用listfiles时,如果你没有权限,如何跳过文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51985392/

相关文章:

java - 如何以某种方式在 java 中实例化模板类?

c++ - 意外的递归行为

c - 我们如何在 C 中使用递归打印系列 1+ 11 +111+........ 最多 N 项的总和

c - 递归正数和程序

java - Gradle构建没有类的jar

java - Optaplanner 自定义 MoveFactory 未使用

c - 如何在递归函数中将指针变量从被调用函数传递到调用函数?

javascript - 将子项的多个值相加并将结果保存到 Javascript 中 n 叉树中的父项

java - 按java map 列表中的动态列数分组

java - 在 EditText 中添加一个字符