java - 如何递归搜索文件并跳过权限不足的文件?

标签 java file recursion

所以,我最近发布了一个在递归搜索文件时收到的错误,这是因为我需要 super 用户权限才能查看文件。我对此并不感兴趣,所以我浏览了网络,我最好的选择就是使用 try/catch 语句,但问题是我正在使用的方法(如下所示)如果出现错误,它将完全停止,然后如果我再次启动它,它会完全重新启动。

所以这是代码:

Files.walk(Paths.get("C:\\"))
     .filter(Files::isRegularFile)
     .forEach(System.out::println);

如何跳过我没有足够权限查看的文件?

最佳答案

使用访客代替步行。这使您即使在失败的情况下也可以继续。我在一个 linux 文件上尝试过这个,它给出了类似的错误。您可以在 Windows 中尝试相同的操作。

private static final class ExSafeVisitor extends SimpleFileVisitor<Path>
{
    @Override
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException
    {
        if (Files.isReadable(dir))
        {
            return FileVisitResult.CONTINUE;
        }
        else
        {
            return FileVisitResult.SKIP_SUBTREE;
        }
    }

    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
    {
        if (Files.isReadable(file))
        {
            System.out.println("file = " + file);
        }
        return FileVisitResult.CONTINUE;
    }

    @Override
    //print exception but proceed
    public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException
    {
        exc.printStackTrace();
        return FileVisitResult.CONTINUE;
    }
}

//Files.walk for this path in linux throws exception
Files.walkFileTree(Paths.get("/sys/kernel"), new ExSafeVisitor());

关于java - 如何递归搜索文件并跳过权限不足的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51117801/

相关文章:

java - SMTP 主机配置

java - 将 SELECT COUNT(*) 查询结果分配给 Java 变量

C++ - 如何获取特定用户的桌面路径

WPF 在 MVVM 中使用 SaveFileDialog

python - 阿克曼函数理解

java - Eclipse 渲染问题

java - Struts 配置与 Tiles

python - 显式关闭文件重要吗?

java - 有没有办法在每次递归时创建一个唯一的变量?

javascript - 递归函数在对数组元素求和时根据顺序返回不同的值