使用文件api读取目录:如何处理包含20000-30000个文件的目录?

时间:2012-04-29 15:03:49

标签: java file-io directory iteration

我正在编写一个读取目录内容的简单java程序 并打印出文件名和上次修改时间。

我认为的问题是,我正在阅读的保险库非常庞大,并且有一些案例 单个目录中的文件可能会超过20000。 使用文件api

    `file.listFiles()` 

会创建20000个文件对象,我担心这个 可能会减慢这个过程,也可能会使记忆膨胀。

有没有办法批处理,即告诉java一次扫描50个文件的目录,或者至少一次迭代一个文件,而不是一次性加载内存中的所有对象

2 个答案:

答案 0 :(得分:5)

您应该通过java.nio.file.Files.walkFileTree(...)使用java.nio.file.FileVisitor。它已经在Java 7中引入了这个用例。

答案 1 :(得分:1)

我不担心内存,我会担心这些文件的磁盘访问时间。

文件的访问时间可以是8毫秒,即使对于SSD,它也可以是100微秒。创建File对象所需的时间可能不到一秒钟。

你是对的,20,000个文件对象是非常重要的,但如果这是你的主要问题,你做得很好。

您可以使用list()代替内存效率稍高的内容,并根据需要创建文件。