当前位置: 首页 > 面试题库 >

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

冯星阑
2023-03-14
问题内容

我从没想过会发生这种情况,但是遇到了我的第一个Java错误:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5003595

我几乎与错误(在Linux上为NFS)中描述的情况完全相同,并且我看到File.exists()没有返回正确的值(至少不是立即返回)。

所以我的问题是,这种检查文件是否存在的方法是否可以替代?如果可能的话,我希望它与操作系统无关。

编辑:我找到了一种解决方法。如果调用“ ls $
filedir”,则NFS会刷新给Java造成麻烦的所有缓存/元数据,并且File.exists()返回正确的值。当然,这并不完全理想,因为它会损害便携性,但是有一些方法可以解决该问题。

谢谢-本


问题答案:

NFS的基本问题是它缓存属性,文件和目录信息。这意味着信息可能已过时。您也许可以关闭缓存,但性能会大大降低。

要记住的重要一点是,NFS不是消息服务,也不是为及时传递数据而设计的。



 类似资料:
  • 问题内容: 我有以下使用Java 7功能(如 java.nio.file.Files和java.nio.file.Paths)的代码 现在,我必须在Java 6上运行相同的代码,除了使用FileReader之外,还有哪些最佳替代方案? 问题答案: 替代方法是java.io或Apache Commons IO中的类,Guava IO也可以提供帮助。 番石榴是最现代的,所以我认为这是最适合您的解决方案

  • 问题内容: 我想知道是否存在现有的替代方法,或者如何在Java 5之前实现java.util.concurrent.locks.Lock#tryLock()的语义。如果锁已经被持有,则有可能立即退后另一个线程。 问题答案: 如果需要支持操作,则不能使用Java的固有锁定功能。您必须实现自己的类,该类维护所需的状态,即所有者和计数器,并可能使用内在锁定来实现其线程安全更新和阻止(在较早的Java版本

  • 问题内容: 我正在实现自己的使用 合并功能 的收集器。不幸的是,对于我的某些情况,我无法重用抛出 IllegalStateException 的以下JDK合并函数。 发生这种情况是因为它具有 私有 访问修饰符,并且限制了其他(而非内部)类的访问。但是,javadoc表示以下内容: 这可以用来执行以下假设:所收集的元素是不同的 但是,正如我所看到的,java doc已经过时了。无法使用。问题是JDK

  • 问题内容: replace方法返回一个字符串对象而不是替换给定字符串的内容这一事实有点让人费解(但是,当您知道字符串在Java中是不可变的时,这是可以理解的)。通过在某些代码中使用深度嵌套的替换,我的性能受到了重大影响。有什么我可以替换的东西可以使它更快吗? 问题答案: 这就是StringBuilder的目的。如果要进行很多操作,请在上进行操作,然后在需要时将其转换为。 因此描述: “可变的字符序

  • 问题内容: Java中goto关键字的替代功能是什么? 由于Java没有goto。 问题答案: 你可以使用带标签的BREAK语句: 但是,在正确设计的代码中,你不需要GOTO功能。

  • 我一直在通过Netbeans使用CodeNameOne设计一个应用程序,并遇到了一些问题,特别是“找不到符号”编译错误。经过进一步的研究,我发现这是由于CNO不支持某些库/杂项。 我想知道是否有其他方法可以使用以下库/执行任务: (从文件读取)导入java.io.file;符号:类文件位置:package java.io (抛出FileNotFoundException)导入java.io.Fil