6

从oracle 的这个java 教程中:

请注意,!Files.exists(path) 不等同于 Files.notExists(path)。

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

4

6 回答 6

10

!Files.exists()返回:

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

Files.notExists()返回:

  • true如果文件不存在
  • false如果文件存在或无法确定其存在
于 2013-04-30T15:59:22.530 回答
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(参见上面关于可能性的解释)。

于 2013-04-30T16:03:54.760 回答
3

查看源代码中的差异,它们都做完全相同的事情,但有 1 个主要差异。该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如果在尝试检索文件时抛出an,则将文件返回为不存在。

  • notExists(...)通过确保抛出特定的子异常并且它不是导致未找到结果的任何其他子异常,将文件返回IOExceptionNoSuchFileFoundIOException存在

于 2013-04-30T16:07:00.830 回答
1

来自. _ _notExists

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

我的亮点。

于 2013-04-30T15:59:40.787 回答
1

您可以只指定绝对路径,如果目录/目录不存在,它将创建目录/目录。

private void createDirectoryIfNeeded(String directoryName)
{
File theDir = new File(directoryName); 
if (!theDir.exists())
    theDir.mkdirs();
}
于 2014-09-04T16:50:10.217 回答
1
 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,但这种检查更好更有效。

于 2019-06-12T07:26:34.697 回答