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

如何在Java中获取具有最新lastModified日期的文件?,java,file,last-modified,Java,File,Last Modified,可能重复: 我有一个需要检查更改的文件目录。我认为当一个文件有一个修改日期>代码>比上次检查中所记得的更新(这意味着是一个缓存依赖关系)时,它就发生了变化。p> 在Java中查找目录中最新修改文件的最快方法是什么 也许我太乐观了,但我明确地寻找一些不涉及迭代所有文件的东西 此外,仅检查目录修改日期是不够的,因为这只会在内部文件列表更改时更改,而不会在其中一个文件本身刚刚修改时更改。您必须迭代所有文件名并提取修改日期。即使您不想迭代所有文件,您用于查找此文件的任何第三方API都将迭代所有文件

可能重复:

我有一个需要检查更改的文件目录。我认为当一个文件有一个<代码>修改日期>代码>比上次检查中所记得的更新(这意味着是一个缓存依赖关系)时,它就发生了变化。p> 在Java中查找目录中最新修改文件的最快方法是什么


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


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

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

即使您不想迭代所有文件,您用于查找此文件的任何第三方API都将迭代所有文件


JDK 7的目的是提供java.nio.WatchService,如果有必要,它显然会遍历所有内容,但会使用文件系统支持来完成您要求的任务。从消极的方面来说,我认为这是不可能的。您可以使用运行时类从java“ls-lrt | tail-1”执行unix命令行,并解析字符串以获取最新修改文件的名称参见此解决方案:


这是纯java代码,但有一个简单的技巧来提高性能。

java代码是唯一修改这些文件的东西吗?(我不这么认为,但以防万一…@Pablo Fernandez:不,是用户把新东西放进去的。嗯。。。也许有一个解决办法,与事件IO。遗憾的是,我不是这方面的专家,但希望这能给任何人一个提示:)。祝你好运我已经这么想了。我想这就是我最终要做的事。事实上,未来是光明的。让我编辑我的答案。谢谢编辑。:-)注:在.NET中已经可以这样做了(通过
System.IO.FileSystemWatcher
)我非常期待JDK 7——如果它真的完成了的话——因为Java在C#devs现在认为理所当然的事情上有一些进展。如果你有几千个文件(也许有一天你会有),我指的是不经过目录中的所有文件对象是不可能的这不是个好主意。我不确定我是否正确理解了这个解决方案:基本操作是“获取每个文件,查看其日期”。这些都不比老式的循环快。因此,速度的提高来自于实时分拣?你是对的。它不比一个循环快,但只有一个循环。任何其他可移植解决方案(纯java、无需转义到操作系统特定命令等)都需要一个循环来获取所有文件,然后在文件上进行另一个循环来获取最后修改的文件。这是通过将逻辑放入第一个循环本身来保存第二个循环。感谢您的澄清。:)但是,说实话:这个特定的解决方案是要在ColdFusion上下文中使用的,它运行在Java之上。您可以在ColdFusion中操作Java对象,但不可能实现接口或任何其他高级功能。我不想为这个问题编写自己的Java类,所以我将它保留在“DoTwo-loops”中。现在已经足够好了。备注:在评论中使用@repress,否则您的回复可能会被忽略。(只在某人自己的帖子上发表评论,就像我评论你的答案一样,不需要@reply。)