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;
}
});
Modifier and Type | Method and Description |
---|---|
FileVisitResult |
postVisitDirectory(T dir, IOException exc)
在目录中的条目之后调用目录,并且已经访问了所有的后代。
|
FileVisitResult |
preVisitDirectory(T dir, BasicFileAttributes attrs)
在目录中的条目被访问之前调用一个目录。
|
FileVisitResult |
visitFile(T file, BasicFileAttributes attrs)
为目录中的文件调用。
|
FileVisitResult |
visitFileFailed(T file, IOException exc)
为无法访问的文件调用。
|
FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs) throws IOException
如果此方法返回CONTINUE
,则访问目录中的条目。 如果此方法返回SKIP_SUBTREE
或SKIP_SIBLINGS
,则目录(和任何后代)中的条目将不被访问。
dir
- 对目录的引用
attrs
- 目录的基本属性
IOException
- 如果发生I / O错误
FileVisitResult visitFile(T file, BasicFileAttributes attrs) throws IOException
file
- 对该文件的引用
attrs
- 文件的基本属性
IOException
- 如果发生I / O错误
FileVisitResult visitFileFailed(T file, IOException exc) throws IOException
file
- 对该文件的引用
exc
- 阻止文件被访问的I / O异常
IOException
- 如果发生I / O错误
FileVisitResult postVisitDirectory(T dir, IOException exc) throws IOException
SKIP_SIBLINGS
的visitFile
方法或者在遍历目录时发生I / O错误),也会调用此方法。
dir
- 对目录的引用
exc
- null
如果目录的迭代完成没有错误;
否则会导致目录的迭代过早完成的I / O异常
IOException
- 如果发生I / O错误