有没有正确的方法来检查Java中的文件/目录存在?

时间:2011-11-03 14:25:46

标签: java file-io

代码:

String dir = //Path to the  directory
File saveDir = new File(dir);
//Here comes the existence check
if(!saveDir.exists())
  saveDir.mkdirs();

此部分代码用于将具有给定目录路径的文件保存到文件系统。在保存之前,我想检查给定的保存目录是否存在。然而,存在检查似乎并不像我想要的那样工作。如果不删除if子句,就不会创建所需的目录。在搜索我的问题时,我遇到了这个有趣的堆栈问题。 Alternative to File.exists() in Java。据我所知java.io有这个问题。

在执行文件操作时是否有正确且安全的方法来检查目录或资源的存在?

4 个答案:

答案 0 :(得分:28)

new File(dir).getCanonicalFile().isDirectory();  

骨架供您参考: -

File f = new File("....");
if (!f.exists()) {
    // The directory does not exist.
    ...
} else if (!f.isDirectory()) {
    // It is not a directory (i.e. it is a file).
    ... 
}

答案 1 :(得分:6)

好吧,即使检查是正确的,在评估if条件之后,您仍然无法确定目录是否仍然存在。另一个进程或用户可以创建/删除它。因此,您必须检查操作是否失败(可能会捕获相应的异常)。

因此,您不应该依赖检查,并始终期待最坏的情况。 (好吧,支票可能可以防止你做一些不必要的事情,或者要求用户确认等等。但他们不会保证任何东西。)

答案 2 :(得分:1)

只需拨打mkdirs。它不会覆盖现有的目录,所以你的检查是不必要的(在任何情况下都是不可靠的)。

答案 3 :(得分:0)

FileChannel.lock()完成你想要的只要它不是你在使用时删除目录的JVM中的另一个线程。这就是代表JVM取消对文件/文件夹的操作系统锁定进程,因此当其他进程无法访问该目录时,JVM中的线程可以。