我正在编写代码来遍历我可以访问的所有文件夹。 但是,当文件夹无法访问时,我的程序会停止。
如何绕过该文件夹并继续寻找其他文件夹? 或者,换句话说,我如何显示我有权访问的文件夹和文件?
我正在使用java.nio.file.Paths(Java 8)。
这是我的代码:
import java.io.IOException;
import java.nio.file.FileVisitOption;
import java.nio.file.Files;
import java.nio.file.Paths;
// Test File D:\TEST\test.jpg
public class TestIteration{
// Main
public static void main(String[] args) throws Exception {
// Iterate through folders
String rootFolder = "c:\\";
WalkDirTree(rootFolder); // Walks through directory tree and print names of directories/files.
}
// Prints all file/directory names in the entire directory tree
private static void WalkDirTree(String rootFolder) throws Exception {
Files.walk(Paths.get(rootFolder)).forEach(path -> {
System.out.println(path);
});
System.out.println("_______________________________________DONE");
}
}
答案 0 :(得分:1)
如果无法访问你指的是"不可读",那么我认为你可以使用Files#isReadable
;来自其文件:
测试文件是否可读。此方法检查文件是否存在,以及此Java虚拟机是否具有允许其打开文件以进行读取的适当权限。根据实现,此方法可能需要读取文件权限,访问控制列表或其他文件属性,以检查对文件的有效访问。因此,该方法相对于其他文件系统操作可能不是原子的。
您的代码如下:
Files.walk(Paths.get(rootFolder)).filter(Files::isReadable).forEach(path -> {
System.out.println(path);
});
答案 1 :(得分:-2)
虽然流肯定很漂亮,但您可能需要单独处理每个无法访问的文件。
在这种情况下,您可以使用for
org.apache.commons.io
循环
String[] extensions = {"png","txt"}; // file extensions you might want to target
Collection fileObjects= FileUtils.listFiles(new File("dirPath"),extensions,true);
for (Object obj : fileObjects){
File file = (File) obj;
if (!Files.isReadable(file.toPath())) continue; // or do smth else
}
如果您希望定位所有文件而不管其扩展名,请传递null
而不是String
数组。
如果您不希望递归搜索,请传递false
而不是true