- 类型参数:
T- 文件/目录的类型
- 所有已知的实现类:
SimpleFileVisitor
public interface FileVisitor<T>
文件的访问者。此接口的实现提供给
Files.walkFileTree 方法以访问文件树中的每个文件。
使用示例:假设我们要删除一个文件树。在这种情况下,应在删除目录中的条目后删除每个目录。
Path start = ...
Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
@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<Path>() {
@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;
}
});
- 自从:
- 1.7
-
方法总结
修饰符和类型方法描述postVisitDirectory(T dir, IOException exc) 在访问了目录中的条目及其所有后代之后为目录调用。preVisitDirectory(T dir, BasicFileAttributes attrs) 在访问目录中的条目之前为目录调用。visitFile(T file, BasicFileAttributes attrs) 为目录中的文件调用。visitFileFailed(T file, IOException exc) 为无法访问的文件调用。
-
方法详情
-
preVisitDirectory
在访问目录中的条目之前为目录调用。如果此方法返回
CONTINUE,则访问目录中的条目。如果此方法返回SKIP_SUBTREE或SKIP_SIBLINGS,则将不会访问目录(以及任何后代)中的条目。- 参数:
dir- 对目录的引用attrs- 目录的基本属性- 返回:
- 访问结果
- 抛出:
IOException- 如果发生 I/O 错误
-
visitFile
为目录中的文件调用。- 参数:
file- 对文件的引用attrs- 文件的基本属性- 返回:
- 访问结果
- 抛出:
IOException- 如果发生 I/O 错误
-
visitFileFailed
为无法访问的文件调用。如果无法读取文件的属性,文件是无法打开的目录等原因,将调用此方法。- 参数:
file- 对文件的引用exc- 阻止文件被访问的 I/O 异常- 返回:
- 访问结果
- 抛出:
IOException- 如果发生 I/O 错误
-
postVisitDirectory
在访问了目录中的条目及其所有后代之后为目录调用。当目录迭代过早完成时也会调用此方法(通过visitFile方法返回SKIP_SIBLINGS,或在目录上迭代时出现 I/O 错误)。- 参数:
dir- 对目录的引用exc-null如果目录迭代完成且没有错误;否则导致目录迭代过早完成的 I/O 异常- 返回:
- 访问结果
- 抛出:
IOException- 如果发生 I/O 错误
-