因此,我“听说”了Java 7中引入的DirectoryStream
比传统的目录列表方法快。但是,对我而言并非如此。列出整个目录可能更快一些,但是当过滤出文件并仅接受文件夹时,则要花费更多的时间。例如,这些是代码:
使用File
:
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/