首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按修改时间排序更改文件,不存在比较方法冲突错误

按修改时间排序更改文件,不存在比较方法冲突错误
EN

Stack Overflow用户
提问于 2013-12-07 02:27:20
回答 1查看 2.8K关注 0票数 2

我的代码可以删除目录中除最后n个最近修改的文件之外的所有文件。该代码从目录中获取File对象的列表,使用查看File.lastModifedTime()的比较器对它们进行排序,然后删除适当的子列表。

当我们升级到Java7时,程序开始抛出java.lang.IllegalArgumentException: Comparison method violates its general contract!。我怀疑这是因为文件在排序完成之前被修改(正常行为),所以比较器在检查每个文件的最后修改时间时返回不一致的值。

我的问题是,如何解决这个问题并删除正确的文件?

我读到的一个建议是在排序之前将文件及其上次修改时间存储在映射中,以便在进行比较时,从映射中查找上次修改时间。但是,如果文件更改了中间排序,映射不会更新,因此您最终不会删除错误的文件吗?

我想到的另一个想法是使用Java NIO的文件监视来保存排序列表,并在文件发生更改时重新排序。但这似乎相当复杂。

我还想到了一种强力方法,将sort包装在try-catch语句中,如果遇到比较方法冲突,就重试整个sort。

最后,我可以只设置java.util.Arrays.useLegacyMergeSort属性,然后回到Java6的静默忽略方式。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20431031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档