因此,我“听说”了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/

10-09 22:56