使用以下代码,我将打印所有子目录,但是如果我无法访问其中一个子目录,则此代码将中断并返回错误。
我该如何解决?
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());
}
}
}
答案 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());
}
}
}