使用Java7只访问特定深度的目录



使用方法时

java.nio.file.Files.walkFileTree(路径根,设置选项,int maxDepth,FileVisitor访问者)

可以指定要访问的文件的最大深度。是否还有一种方法可以指定只访问特定精确深度的路径?

更具体地说,我只想访问目录,但这可以很容易地用检查

if (attrs.isDirectory()) {
    // do something
}

在CCD_ 1回调中。


示例:假设我有一个包含文件root/dir1/dir11/file.aroot/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(…)遇到的所有文件,包括目录

相关内容

  • 没有找到相关文章

最新更新