java.nio.file.path-如何在迭代时跳过不可访问的文件/文件夹

java.nio.file.path-如何在迭代时跳过不可访问的文件/文件夹,java,directory,iteration,Java,Directory,Iteration,我正在编写代码来遍历我可以访问的所有文件夹。 但是,当无法访问上的文件夹时,我的程序将停止 如何绕过该文件夹并继续查找其他文件夹? 或者,换句话说,如何显示我有权访问的文件夹和文件 我正在使用java.nio.file.path(Java8) 这是我的密码: import java.io.IOException; import java.nio.file.FileVisitOption; import java.nio.file.Files; import java.nio.file.Paths

我正在编写代码来遍历我可以访问的所有文件夹。 但是,当无法访问上的文件夹时,我的程序将停止

如何绕过该文件夹并继续查找其他文件夹? 或者,换句话说,如何显示我有权访问的文件夹和文件

我正在使用java.nio.file.path(Java8)

这是我的密码:

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

}
如果你指的是“不可读”,那么我认为你可以使用;根据其文件:

测试文件是否可读。此方法检查文件是否存在,以及此Java虚拟机是否具有允许其打开文件进行读取的适当权限。根据实现的不同,此方法可能需要读取文件权限、访问控制列表或其他文件属性,以便检查对文件的有效访问。因此,相对于其他文件系统操作,此方法可能不是原子的

您的代码如下所示:

Files.walk(Paths.get(rootFolder)).filter(Files::isReadable).forEach(path -> {
    System.out.println(path);
});

虽然流确实很漂亮,但您可能需要单独处理每个不可访问的文件

在这种情况下,您可以使用
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
,而不是
字符串
数组


如果您不希望递归搜索,则传递
false
而不是
true

如果“stops”的意思是“抛出异常”,则只需捕获异常并处理它。方法名称在Java中应以小写字母开头。您所说的“不可访问”可能是什么意思的重复?你说的是一个特殊的例外吗?我知道lambdas很有趣,但在这种情况下,你可能会更好,它可以让你单独处理每个文件的状态。我喜欢这个想法,但它不起作用。它仍然停留在java.nio.file.AccessDeniedException:C:\$Recycle.Bin\S-1-5-18I试图对每个路径和文件的lambda表达式应用一个try-and-catch,但找不到使其工作的方法。感谢您让我知道。我会看看是否可以重新创建您的问题,但您可能需要使用流以外的其他方法来解决它。