Ниже приведен простой код для тестирования метода 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;
}