Java 中获取最新(降序最后修改)n 个文件的最佳优化方式是什么 - 无需加载大目录的所有文件

what is best optimized way in Java to get latest (Descending Last-Modified) n files - without loading all files of a large directory

目标是获取最新的 100 个文件。 目前它是通过扫描所有文件 - 准备文件列表 - 然后应用排序+限制来完成的。

这非常慢 - 在目录太大的情况下。那么有没有什么方法或 API 可以在不加载完整文件列表的情况下执行此操作。

当文件在几千个范围内时,目前以下三种方法不能提供令人满意的性能。

您必须查看每个文件的属性才能找到它的年龄,您必须查看所有文件才能找到最新的 N 个。

您唯一的选择自由是如何您如何查看。例如,无需读取文件内容。

我会考虑使用 Files.find()。从其文档中可以看出,这可以完成所需的最少工作。

您不需要保存所有文件。跟踪最新的 100 个中最旧的。如果 'next' 文件早于该文件,则无需保留它。否则你必须弄清楚要丢弃 100 个中的哪个。这折衷了保留整个列表的开销和决定丢弃什么的开销。如果文件数量远大于 100,它可能对您有利。

在某种程度上,开销是 file-system 依赖的。如果 last-modified 时间存储在目录条目中,则无需查看 inode 即可获取它。当然,这不在你的控制之下。