gpt4 book ai didi

java - 使用 Java 7 仅访问特定深度的目录

转载 作者:行者123 更新时间:2023-11-30 08:11:26 24 4
gpt4 key购买 nike

使用方法时

java.nio.file.Files.walkFileTree(Path root, Set options, int maxDepth, FileVisitor visitor)

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

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

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

visitFile 回调中。


示例:假设我有一个包含文件 root/dir1/dir11/file.aroot/dir2/file.b 的目录结构,我调用 walkFileTreeroot 上,maxDepth=2。然后,我只想处理

root/dir1/dir11

我既不想处理深度也为二的文件 root/dir2/file.b,也不想处理深度小于二的其他目录路径:

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 解释了为什么这会导致所需的行为:

For each file encountered this method attempts to read its java.nio.file.attribute.BasicFileAttributes. If the file is not a directory then the visitFile method is invoked with the file attributes. (...)

The maxDepth parameter is the maximum number of levels of directories to visit. (...) The visitFile method is invoked for all files, including directories, encountered at maxDepth (...)

关于java - 使用 Java 7 仅访问特定深度的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31026294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com