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

fga*_*akk 6 java file-io

码:

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

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

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

Siv*_*ran 28

new File(dir).getCanonicalFile().isDirectory();  
Run Code Online (Sandbox Code Playgroud)

骨架供您参考: -

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).
    ... 
}
Run Code Online (Sandbox Code Playgroud)

  • 然而,更多选票的答案的另一个例子是有用的,而不是接受的答案. (4认同)

Vla*_*lad 6

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

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