Java中File.exists()的替代方案

Ben*_*Ben 6 java file-io

我从未想过它会发生在我身上,但我遇到了我在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

小智 6

我遇到了同样的问题并通过调用来解决它file.getParentFile().list().与您的解决方案基本相同,但操作系统不可知.


Ben*_*igt 5

一切都会File.exists告诉您该文件是否在过去的某个时间存在。它不会告诉你:

  • 当您尝试打开它时它是否会存在
  • 是否有权限打开
  • 任何有用的东西,真的

因此,请尝试设计您的应用程序,使其可以处理不存在的文件,而无需事先尝试检查。(在实际处理文件时,您必须处理各种异常。)


dty*_*dty 5

如果File.exists()返回true 会发生什么,然后有人删除文件/您的NFS挂载消失,然后您尝试打开文件?基本上,File.exists()由于您需要处理因打开文件而产生的异常,因此无用.


Pet*_*rey 5

NFS的基本问题是它缓存属性,文件和目录信息.这意味着信息可能已过时.您可能能够关闭缓存,您将看到性能显着下降.

需要记住的重要一点是,NFS不是一种消息传递服务,并不是为及时传送数据而设计的.