我正在寻找一种高效的方法来迭代一个或多个目录中的数千个文件。
似乎唯一迭代目录中文件的方法是使用
我有超过150,000个文件在一个目录中,并且经过许多-Xms/-Xmm试运行,我摆脱了内存溢出问题。但是填充数组所需的时间并没有改变。
我希望创建一种可迭代的类,该类使用opendir()/closedir()等函数按需惰性加载文件名。有办法做到这一点吗?
更新:
似乎唯一迭代目录中文件的方法是使用
File.list*()
函数。这些函数有效地将文件列表加载到某种集合中,然后让用户迭代它。从时间/内存消耗的角度来看,这似乎是不实际的。我尝试查看commons-io和其他类似的工具,但它们最终都在某个地方调用File.list*()
。JDK7的walkFileTree()
很接近,但我无法控制何时选择下一个元素。我有超过150,000个文件在一个目录中,并且经过许多-Xms/-Xmm试运行,我摆脱了内存溢出问题。但是填充数组所需的时间并没有改变。
我希望创建一种可迭代的类,该类使用opendir()/closedir()等函数按需惰性加载文件名。有办法做到这一点吗?
更新:
Java 7 NIO.2支持通过java.nio.file.DirectoryStream进行文件迭代。它是一个Iterable类。至于JDK6及以下版本,唯一的选择是File.list*()
方法。