【发布时间】:2020-12-08 23:28:10
【问题描述】:
我从没想过它会发生在我身上,但我遇到了我在 Java 中的第一个错误:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5003595
我几乎处于与错误(Linux 上的 NFS)中描述的完全相同的情况,我看到 File.exists() 没有返回正确的值(至少不是马上)。
所以我的问题是,除了这种检查文件是否存在的方法之外,还有其他方法吗?如果可能的话,我更愿意让它与操作系统无关。
编辑:我找到了解决方法。如果您调用ls $filedir,NFS 会刷新任何给Java 带来麻烦的缓存/元数据,并且File.exists() 返回正确的值。当然,这并不完全理想,因为它会损害便携性,但有一些方法可以解决这个问题。
【问题讨论】:
-
是什么样的文件?您在寻找特定类型的文件吗?或者只是任何文件?您可以运行 System.exec("ls") 并解析文件的结果。虽然我确信有更简单的方法,所以我会将此作为评论
-
这个错误是 Java 1.4.2_03 特有的,它在几年前就已经结束了支持生命周期。出于好奇,为什么不直接迁移到 Java 5 或更高版本?您是否尝试过使用受支持的 JRE 进行测试以查看是否有任何中断?
-
@Steve:我正在运行 Java 6。我假设由于他们为这个错误标记了“不会修复”,所以它在任何版本的 Java 中都没有修复。至少,这就是我的应用程序的行为告诉我的。
-
奇怪。我同意下面的 Ben,因为 File.exists() 可以报告误报(即说文件不存在时存在)。然而,假否定是不同的(即当文件就在那里时说文件不存在)。该错误报告已有 6 年多的历史了,并且 cmets 表示他们在 JSR 203 的开发中解决了这个问题......所以如果你仍然在当代 JRE 中看到这个,我会提交一个新的错误报告。但是,下面的两个答案几乎是正确的......最好的解决方法是简单的 try-catch 块。
标签: java file-io java-io nfs java-nio