清单 1. FileVisitor 实现
FileVisitor<Path> myFileVisitor = new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir) {
System.out.println("I'm about to visit the "+dir+" directory");
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attribs) {
System.out.println("I'm visiting file "+file+" which has size " +attribs.size());
return FileVisitResult.CONTINUE;
}
};
@Override
public FileVisitResult preVisitDirectory(Path dir) {
System.out.println("I'm about to visit the "+dir+" directory");
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attribs) {
System.out.println("I'm visiting file "+file+" which has size " +attribs.size());
return FileVisitResult.CONTINUE;
}
};
清单 1 中 FileVisitor 的实现,应当为其访问的每个目录和文件打印消息,并给出从其 BasicFileAttributes 中获取的文件大小。
接下来,我们想创建开始我们文件访问的 Path。利用类 java.nio.Paths 完成这一操作:
Path headDir = Paths.get("headDir");
我们可以利用两个方法中的任何一个在 类上启动树遍历:
public static void walkFileTree(Path head, FileVisitor fileVisitor) 浏览头目录下的文件树,在这一过程中调用在 fileVisitor 中实现的回调方法。
public static void walkFileTree(Path head, Set
我们将使用 walkFileTree() 方法的简单版本,来开始浏览文件数的流程:
Files.walkFileTree(headDir, myFileVisitor);
假设目录结构是这样的:
headDir
|--- myFile1
|--- mySubDirectory1
| \myFile2
\--- mySubDirectory2
|--- myFile3
\--- mySubdirectory3
\---myFile4
|--- myFile1
|--- mySubDirectory1
| \myFile2
\--- mySubDirectory2
|--- myFile3
\--- mySubdirectory3
\---myFile4
清单 2 展示了这一例子的输出: