我正在编写一个读取目录内容的简单java程序 并打印出文件名和上次修改时间。
我认为的问题是,我正在阅读的保险库非常庞大,并且有一些案例 单个目录中的文件可能会超过20000。 使用文件api
`file.listFiles()`
会创建20000个文件对象,我担心这个 可能会减慢这个过程,也可能会使记忆膨胀。
有没有办法批处理,即告诉java一次扫描50个文件的目录,或者至少一次迭代一个文件,而不是一次性加载内存中的所有对象
答案 0 :(得分:5)
您应该通过java.nio.file.Files.walkFileTree(...)使用java.nio.file.FileVisitor。它已经在Java 7中引入了这个用例。
答案 1 :(得分:1)
我不担心内存,我会担心这些文件的磁盘访问时间。
文件的访问时间可以是8毫秒,即使对于SSD,它也可以是100微秒。创建File对象所需的时间可能不到一秒钟。
你是对的,20,000个文件对象是非常重要的,但如果这是你的主要问题,你做得很好。
您可以使用list()
代替内存效率稍高的内容,并根据需要创建文件。