【问题标题】:Java Read files from big directoryJava 从大目录中读取文件
【发布时间】:2017-02-13 08:57:16
【问题描述】:

我有一个包含 100 万个文本文件的目录。我想列出所有文件名。我尝试使用 File.listFiles() 并将文件名打印到控制台。但是在开始打印第一个文件名之前花了很长时间。有没有更快的方法来列出这些文件名?

【问题讨论】:

  • 你试过使用 list() 方法吗?它只返回文件名,而不是整个文件。
  • 是的,list() 在这种情况下可以提供帮助。但如果我的文件夹更大,例如 1000 万个,这仍然是个问题。

标签: java filenames bigdata


【解决方案1】:

由于listFiles() 将结果加载到您的内存中,因此无法使用此方法加速该过程。

但是你可以使用 Java 的DirectoryStream 将内容预加载到内存中并加载每个文件名。看到这个link

Path folder = Paths.get("...");
  try (DirectoryStream<Path> stream = Files.newDirectoryStream(folder)) {
    for (Path entry : stream) {
      // Process the entry
    }
   } catch (IOException ex) {
    // An I/O problem has occurred
  }

【讨论】:

  • 首先,感谢您提供这些有用的信息。现在我在徘徊,如果我可以并行使用这个DirectoryStream。我的意思是,有没有办法寻找流的入口?
  • 这里将how to convertDirectoryStream 转换成Stream 以加速并行性。
猜你喜欢
  • 2012-11-22
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 2019-08-12
  • 1970-01-01
相关资源
最近更新 更多