我正在编写一个简单的 java 程序,它读取目录的内容并打印出文件名和最后修改时间。
我预见的问题是,我正在阅读的 Vault 非常庞大,并且在某些情况下,单个目录中的文件可能会超过 20000。使用文件 api
`file.listFiles()`
反过来会创建 20000 个文件对象,我担心这可能会减慢进程,也可能会使内存膨胀。
有没有办法批处理,即告诉java一次扫描50个文件的目录,或者至少一次迭代一个文件,而不是一次将所有对象加载到内存中
您应该通过 java.nio.file.Files.walkFileTree(...) 使用 java.nio.file.FileVisitor。它已在 Java 7 中专门针对此用例引入。
我不会担心内存,我会担心这些文件的磁盘访问时间。
文件的访问时间可以是 8 毫秒,即使对于 SSD,也可以是 100 微秒。创建 File 对象所需的时间可能不到一微秒。
您说得对,20,000 个 File 对象并非微不足道,但如果这是您的主要问题,那么您做得很好。
您可以list()
改用它,它会稍微提高内存效率并仅在需要时创建文件。