想要在Java中使用列表文件时,如何在没有权限的情况下跳过文件?

时间:2018-08-23 12:02:32

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

1 个答案:

答案 0 :(得分:2)

有关返回的内容,请参见listFiles的{​​{3}}:

  

如果目录为空,则数组为空。如果返回null   此抽象路径名不表示目录,或者I / O错误   发生。

为了使您的代码失效保护,请执行以下操作:

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