- 类型参数:
-
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 {
// 目录迭代失败
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;
}
});
- 自 JDK 版本:
- 1.7
-
Method Summary
Modifier and TypeMethodDescriptionpostVisitDirectory
(T dir, IOException exc) 在访问目录及其所有后代的条目之后调用。preVisitDirectory
(T dir, BasicFileAttributes attrs) 在访问目录中的条目之前调用。visitFile
(T file, BasicFileAttributes attrs) 在访问目录中的文件时调用。visitFileFailed
(T file, IOException exc) 在无法访问文件时调用。
-
Method Details
-
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 错误
-