首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectoryStream比Files.listFiles()快吗?

DirectoryStream比Files.listFiles()快吗?
EN

Stack Overflow用户
提问于 2021-02-10 16:03:06
回答 1查看 187关注 0票数 0

我是DirectoryStream的新手,现在开始学习它了。我看到了这句话

然而,

7引入了一种更快的替代File#listFiles的方法,称为DirectoryStream。

并决定用简单的代码来测试它。

代码语言:javascript
复制
 public class Testing {
   static Path dir = Paths.get("C:\\Users\\Dmitry\\Downloads");


// Method using File.listFiles
public static Set<String> listFilesUsingJavaIO(String dir) {
    return Stream.of(new File(dir).listFiles())
            .filter(file -> !file.isDirectory())
            .map(File::getName)
            .collect(Collectors.toSet());
}




// Method using DirectoryStream
    public static Set<String> listFilesUsingDirectoryStream(String dir) throws IOException {
        Set<String> fileList = new HashSet<>();
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(dir))) {
            for (Path entity : stream) {
                if (!Files.isDirectory(entity)) {
                    fileList.add(entity.getFileName()
                            .toString());
            }
        }
    }
    return fileList;
}




public static void main(String[] args) throws IOException {
    LocalDateTime ldt1 = LocalDateTime.now(); 

    Set<String> setik = listFilesUsingDirectoryStream(dir.toString());
    System.out.println(setik);
    LocalDateTime ldt2 = LocalDateTime.now(); 
    long seconds = ChronoUnit.MILLIS.between(ldt1,ldt2);

System.out.println(seconds); // Difference in time
    }
}

我有两种方法。一种使用File.listFiles(),另一种使用- DirectoryStream。多次执行它们,并始终得到相同的结果-使用File.listFiles的流更快。我真的很感兴趣,如果使用DirectoryStream ()的StreamwithFile.listFiles()工作得更好,我做错了什么,还有什么是File.listFiles的意义。

我非常感谢你的回答!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-10 16:47:04

当您拥有具有数千个文件的目录时,File#listFiles()将花费一段时间,因为它必须枚举所有文件并构造返回的数组。DirectoryStream在读取目录时将开始返回文件。

如果您的应用程序不需要整个文件列表(例如,如果它正在寻找与某些条件匹配的任何文件),那么DirectoryStream可能会大大加快速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66140472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档