gpt4 book ai didi

java - 递归列出给定目录中的所有文件,隐藏文件夹中的文件除外

转载 作者:行者123 更新时间:2023-12-04 16:10:33 24 4
gpt4 key购买 nike

我有以下代码:

Files.find( startPath, Integer.MAX_VALUE, ( path, attributes ) -> path.toFile().isFile() )
.map( p -> startPath.relativize( p ).toString() ).collect( Collectors.toList() );

这将返回给定路径内具有相对路径的文件名列表。我不知何故被困在 additoinally 排除所有放置在文件结构中某处隐藏文件夹中的文件。有什么建议吗?

最佳答案

您可以使用 Files.walkFileTree而不是 Files.find:

List<String> files = new ArrayList<>();

Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attr)
throws IOException {
if (attr.isRegularFile()) {
files.add(startPath.relativize(file).toString());
}
return super.visitFile(file, attr);
}

@Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attr)
throws IOException {
if (Files.isHidden(dir) ||
(attr instanceof DosFileAttributes &&
((DosFileAttributes) attr).isHidden())) {

return FileVisitResult.SKIP_SUBTREE;
}
return super.preVisitDirectory(dir, attr);
}
});

代码看起来比较长,但是效率不亚于Files.find。

(如果您想知道为什么 DosFileAttributes 的具体处理在那里,那是因为 documentation for Files.isHidden 指出,“在 Windows 上,如果文件不是目录并且 DOS 隐藏 属性已设置。”)

关于java - 递归列出给定目录中的所有文件,隐藏文件夹中的文件除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42676320/

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