如何在 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 日期的文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark - 如何检查两条记录中哪一条具有最新日期及其列值?