以下是一些简单的代码,只是为了测试 "Files.walkFileTree()" 方法。然而,文件夹 "/etc/ssl/private" 具有这些权限("rwx--x---"),即使我认为我用一个if语句("if (permissions.equals("rwx--x---")")对其进行保护,也会抛出异常。
我做错了什么?提前致谢。
我做错了什么?提前致谢。
public static void main (String []args) throws IOException, InterruptedException
{
Files.walkFileTree(Paths.get("/"), new WalkingTheThing2());
}
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException
{
PosixFileAttributeView posixView = Files.getFileAttributeView(dir, PosixFileAttributeView.class);
PosixFileAttributes posixAttr = posixView.readAttributes();
String permissions =PosixFilePermissions.toString(posixAttr.permissions());
if (permissions.equals("rwx--x---"))
{
return FileVisitResult.SKIP_SUBTREE;
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
try{
System.out.println(file.getFileName()+" " +Files.size(file));
return FileVisitResult.CONTINUE;
}
catch(IOException io){return FileVisitResult.CONTINUE;}
}
我得到的异常是:java.nio.file.AccessDeniedException: /etc/ssl/private
编辑:通过覆盖visitFileFailed
解决:
public FileVisitResult visitFileFailed(Path file, IOException io)
{
return FileVisitResult.SKIP_SUBTREE;
}
if (permissions.equals("rwx--x---")) { return FileVisitResult.CONTINUE; }
- Rollerballif
语句,你都会执行return FileVisitResult.CONTINUE
。你需要做的是在你的try
块中添加一个额外的catch
块。 - Xynariz