检查Java中是否存在文件或目录

时间:2013-04-30 15:52:53

标签: java file exists

来自oracle的this java教程:

  

注意!Files.exists(path)不等同于   Files.notExists(路径)。

为什么它们不相同?它在解释方面没有进一步说明。 有人知道更多相关信息吗? 提前谢谢!

6 个答案:

答案 0 :(得分:10)

!Files.exists()返回:

  • true如果文件不存在或无法确定其存在
  • 如果文件存在,则
  • false

Files.notExists()返回:

  • true如果文件不存在
  • false如果文件存在或无法确定其存在

答案 1 :(得分:3)

我们从Files.exists看到的结果是:

TRUE if the file exists; 
FALSE if the file does not exist or its existence cannot be determined.

Files.notExists开始,返回的结果是:

TRUE if the file does not exist; 
FALSE if the file exists or its existence cannot be determined

因此,如果!Files.exists(path)返回TRUE表示它不存在或无法确定存在(2种可能性),而Files.notExists(path)则返回TRUE表示它不存在(仅1)可能性)。

结论!Files.exists(path) != Files.notExists(path)2 possibilities not equals to 1 possibility(参见上文关于可能性的解释)。

答案 2 :(得分:3)

在源代码中查找差异,他们两者完全相同,只有一个主要区别。 notExist(...)方法有一个额外的例外被捕获。

存在:

public static boolean exists(Path path, LinkOption... options) {
    try {
        if (followLinks(options)) {
            provider(path).checkAccess(path);
        } else {
            // attempt to read attributes without following links
            readAttributes(path, BasicFileAttributes.class,
                           LinkOption.NOFOLLOW_LINKS);
        }
        // file exists
        return true;
    } catch (IOException x) {
        // does not exist or unable to determine if file exists
        return false;
    }

}

不存在:

public static boolean notExists(Path path, LinkOption... options) {
    try {
        if (followLinks(options)) {
            provider(path).checkAccess(path);
        } else {
            // attempt to read attributes without following links
            readAttributes(path, BasicFileAttributes.class,
                           LinkOption.NOFOLLOW_LINKS);
        }
        // file exists
        return false;
    } catch (NoSuchFileException x) {
        // file confirmed not to exist
        return true;
    } catch (IOException x) {
        return false;
    }
}

结果差异如下:

    如果在尝试检索文件时抛出!exists(...),则
  • IOException会将文件返回为不存在。

  • notExists(...)通过确保抛出特定的IOException子例外NoSuchFileFound并且IOException上没有任何其他子例外,将文件返回为不存在导致未找到结果

答案 3 :(得分:1)

来自notExists的{​​{3}}。

  

请注意,此方法不是exists方法的补充。 如果无法确定文件是否存在,则两种方法都返回false 。 ...

我的重点。

答案 4 :(得分:0)

你可以指定绝对路径,如果目录/目录没有退出,它将创建drectory /目录。

private void createDirectoryIfNeeded(String directoryName)
{
File theDir = new File(directoryName); 
if (!theDir.exists())
    theDir.mkdirs();
}

答案 5 :(得分:0)

 import java.io.File;

 // Create folder   
 boolean isCreate = new File("/path/to/folderName/").mkdirs();

 // check if exist 
 File dir = new File("/path/to/newFolder/");
 if (dir.exists() && dir.isDirectory()) {

 //the folder exist..
 }

还可以检查if Boolean variable == True,但是这种检查更好,更有效。