我从未想过它会发生在我身上,但我遇到了我在Java中的第一个错误:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5003595
我几乎和bug(Linux on Linux)中描述的情况完全相同,我发现File.exists()没有返回正确的值(至少不是马上就行).
所以我的问题是,有没有替代这种检查文件是否存在的方法?如果可能的话,我宁愿保持操作系统不可知.
编辑:我找到了一个解决方法.如果你调用'ls $ filedir',NFS会刷新任何给Java带来麻烦的缓存/元数据,而File.exists()会返回正确的值.当然,这并不完全理想,因为它会损害可移植性,但有办法解决这个问题.
谢谢,-Ben
一切都会File.exists告诉您该文件是否在过去的某个时间存在。它不会告诉你:
因此,请尝试设计您的应用程序,使其可以处理不存在的文件,而无需事先尝试检查。(在实际处理文件时,您必须处理各种异常。)
如果File.exists()返回true 会发生什么,然后有人删除文件/您的NFS挂载消失,然后您尝试打开文件?基本上,File.exists()由于您需要处理因打开文件而产生的异常,因此无用.
NFS的基本问题是它缓存属性,文件和目录信息.这意味着信息可能已过时.您可能能够关闭缓存,您将看到性能显着下降.
需要记住的重要一点是,NFS不是一种消息传递服务,并不是为及时传送数据而设计的.