如何在 Java 中获取具有最新 lastModified 日期的文件? [复制]

Posted

技术标签:

【中文标题】如何在 Java 中获取具有最新 lastModified 日期的文件? [复制]【英文标题】:How to get the file with latest lastModified date, in Java? [duplicate] 【发布时间】:2011-03-22 17:44:16 【问题描述】:

可能重复:How do I find the last modified file in a directory in Java?

我有一个需要检查更改的文件目录。我认为当其中一个文件的modifiedDate 比我上次检查时记得的更新时它发生了变化(这意味着缓存依赖项)。

在 Java 目录中查找最新修改文件的最快方法是什么?


也许我太乐观了,但我明确地在寻找不涉及迭代所有文件的东西。

此外,仅检查目录修改日期是不够的,因为这仅在 文件列表 内部发生更改时才会更改,而不是在其中一个文件本身刚刚被修改时更改。

【问题讨论】:

java代码是唯一修改这些文件的东西吗? (我不这么认为,但以防万一......) @Pablo Fernandez:不,是用户在里面放了新东西。 嗯...也许有事件 IO 的解决方法。可悲的是,我不是这方面的专家,但希望这能给任何人一个提示:)。祝你好运! 【参考方案1】:

即使您不打算迭代所有文件,用于查找此文件的任何第三方 API 也会迭代所有文件。

JDK 7 旨在拥有 java.nio.WatchService,它显然会在必要时遍历所有内容,但会使用文件系统支持来完全满足您的要求。不利的一面是that's still in the future。

【讨论】:

我已经这么认为了。我想这就是我最终会做的事情。 其实,未来有一些闪亮的东西。让我编辑我的答案。 感谢您的编辑。 :-) PS:这样的事情在 .NET 中已经是可行的了(通过System.IO.FileSystemWatcher)。 我非常期待 JDK 7——如果它真的完成了——因为 Java 在 C# 开发人员现在认为理所当然的事情上有一些追赶。【参考方案2】:

您必须迭代所有文件名并提取修改日期。

【讨论】:

【参考方案3】:

查看此解决方案:How to get only 10 last modified files from directory using Java?

它是纯 java 代码,但有一个简单的 hack 来提高性能。

【讨论】:

我不确定我是否正确理解了这个解决方案:基本操作是“获取每个文件,查看其日期”。这些并不比老式循环快。那么速度的提升来自于动态排序? 你是对的。它不比循环快,但只有一个循环。任何其他可移植解决方案(纯 java、不转义到操作系统特定命令等)都需要 1 个循环来获取所有文件,然后再循环文件以获取最后修改的文件。这个通过将逻辑放在第一个循环本身中来保存第二个循环。 感谢您的澄清。 :) 然而,老实说:这个特殊的解决方案是在 ColdFusion 环境中使用的,它在 Java 之上运行。您可以在 ColdFusion 中操作 Java 对象,但不可能实现接口或任何其他高级东西。我宁愿不想为这个问题编写自己的 Java 类,所以我把它留在“做两个循环”。现在已经足够好了。 PS:在 cmets 中使用@回复,否则您的回复可能会被忽视。 (只有别人自己的帖子上的cmets,比如我评论你的答案,不需要@回复。)【参考方案4】:

我认为这是不可能的。您可以使用 Runtime 类从 java "ls -lrt | tail -1" 执行 unix 命令行并解析字符串以获取最新修改文件的名称

【讨论】:

如果不遍历目录中的所有文件对象,我就无法参考 如果你有几千个文件(也许有一天你会拥有)这不是一个好主意。

以上是关于如何在 Java 中获取具有最新 lastModified 日期的文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

获取最新日期的最新结果,其中三列在mysql中具有相同的值

在 SQL 中获取具有唯一目的地的最新数据

如何从 hive 获取最新的分区数据

Pyspark - 如何检查两条记录中哪一条具有最新日期及其列值?

如何使用 prefetch_related 获取 Django 相关模型中的最新位置

MongoDB:获取具有两个值的不同组合的最新文档