gpt4 book ai didi

java - 为什么 File::listFiles 比 DirectoryStream 更快 - 仅接受目录

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

所以我“听说”Java 7 中引入的 DirectoryStream 比传统的目录列表方法更快。然而,对我来说情况并非如此。列出整个目录可能会更快,但是当过滤掉文件并仅接受文件夹时,需要更多时间。例如,这些是代码:

使用文件:

ArrayList<File> tempArray = new ArrayList();
for (File file : someFile.listFiles()){
if(!file.isDirectory())
continue;
tempArray.add(file);
}

使用DirectoryStream:

DirectoryStream<Path> stream = null;
try {
stream = Files.newDirectoryStream(dir, new DirectoryStream.Filter<Path>() {
public boolean accept(Path file) throws IOException {
return Files.isDirectory(file);
}
});
} catch (IOException ex) {
}

ArrayList<File> files = new ArrayList();
for (Path path : stream)
files.add(path.toFile());
stream.close();

第二种方法(使用 DirectoryStream)要慢得多。我知道这两种方法都会检查每个文件以查看其目录。或者是因为 DirectoryStream 已同步(再次,如果错误请纠正我)?

最佳答案

嗯,在第二种情况下,您要测试两次该路径是否为目录。此外,您实际上是在定义一个新类,它的首次使用成本相对较大。

关于java - 为什么 File::listFiles 比 DirectoryStream 更快 - 仅接受目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34914401/

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