文件的访问者。
该接口的实现被提供给Files.walkFileTree方法以访问文件树中的每个文件。
用法示例:假设我们要删除文件树。 在这种情况下,删除目录中的条目后,应删除每个目录。
Path start = ...
Files.walkFileTree(start, new SimpleFileVisitor() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException
{
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException e)
throws IOException
{
if (e == null) {
Files.delete(dir);
return FileVisitResult.CONTINUE;
} else {
// directory iteration failed
throw e;
}
}
});
此外,假设我们要将文件树复制到目标位置。 在这种情况下,应遵循符号链接,并且应在复制目录中的条目之前创建目标目录。
final Path source = ...
final Path target = ...
Files.walkFileTree(source, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE,
new SimpleFileVisitor() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
throws IOException
{
Path targetdir = target.resolve(source.relativize(dir));
try {
Files.copy(dir, targetdir);
} catch (FileAlreadyExistsException e) {
if (!Files.isDirectory(targetdir))
throw e;
}
return CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException
{
Files.copy(file, target.resolve(source.relativize(file)));
return CONTINUE;
}
});
在目录中的条目及其所有后代访问后,为目录调用。
在访问目录中的条目之前为目录调用。
为目录中的文件调用。
为无法访问的文件调用。
在访问目录中的条目之前为目录调用。
如果此方法返回CONTINUE ,则访问该目录中的条目。 如果此方法返回SKIP_SUBTREE或SKIP_SIBLINGS,则不会访问目录中的条目(以及任何后代)。
为目录中的文件调用。
为无法访问的文件调用。
如果无法读取文件的属性,文件是无法打开的目录以及其他原因,则调用此方法。
在目录中的条目及其所有后代访问后,为目录调用。
当目录的迭代过早完成时(通过visitFile方法返回SKIP_SIBLINGS ,或者在迭代目录时发生I / O错误),也会调用此方法。