使用方法时
java.nio.file.Files.walkFileTree(路径根,设置选项,int maxDepth,FileVisitor访问者)
可以指定要访问的文件的最大深度。是否还有一种方法可以指定只访问特定精确深度的路径?
更具体地说,我只想访问目录,但这可以很容易地用检查
if (attrs.isDirectory()) {
// do something
}
在CCD_ 1回调中。
示例:假设我有一个包含文件root/dir1/dir11/file.a
和root/dir2/file.b
的目录结构,并且我用maxDepth=2
调用root
上的walkFileTree
。然后,我只想处理
root/dir1/dir11
我既不想处理深度为2的文件root/dir2/file.b
,也不想处理其他深度小于2的目录路径:
root
root/dir1
root/dir2
有趣的是,天真的实现正是我想要的:
Files.walkFileTree(root, EnumSet.noneOf(FileVisitOption.class), 2, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
if (attrs.isDirectory()) {
process(path);
}
return FileVisitResult.CONTINUE;
}
});
也就是说,对于给定的示例,它将恰好只处理root/dir1/dir11
。
该解决方案使用了一种明显矛盾的方法来过滤访问文件中的目录。然而,walkFileTree
的JavaDoc解释了为什么这会导致所需的行为:
对于遇到的每个文件,此方法都会尝试读取其java.nio.file.attribute.BasicFileAttributes。如果该文件不是目录,则会使用文件属性调用visitFile方法。(…)
maxDepth参数是要访问的目录的最大级别数。(…)visitFile方法用于在maxDepth(…)遇到的所有文件,包括目录