所以,我最近发布了一个在递归搜索文件时收到的错误,这是因为我需要 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/