Api 为什么文件.exists(…;)和文件.notExists(…;)都存在?

Api 为什么文件.exists(…;)和文件.notExists(…;)都存在?,api,java-io,java,Api,Java Io,Java,IMO拥有这两种方法是多余的,而且确实不清楚! 我不太明白为什么这两种方法都是在API文件中设计的 Files.exist(..)如果文件确实存在,则返回true;如果文件不存在或没有权限,则返回false。那到底为什么会有一个Files.notExist(..) 甲骨文说!Files.exists(…)与Files.notExists(…)!?也许有些事情我不太明白 当存在exist()方法时,使用notExist()有什么好处?我认为javadoc非常清楚为什么notExists不是exis

IMO拥有这两种方法是多余的,而且确实不清楚! 我不太明白为什么这两种方法都是在API文件中设计的

Files.exist(..)如果文件确实存在,则返回true;如果文件不存在或没有权限,则返回false。那到底为什么会有一个Files.notExist(..)

甲骨文说!Files.exists(…)与Files.notExists(…)!?也许有些事情我不太明白


当存在exist()方法时,使用notExist()有什么好处?

我认为javadoc非常清楚为什么
notExists
不是
exists
方法的逻辑补充。逻辑补码
B=!A
表示如果
A
为真,
B
为假,反之亦然。这里的情况并非如此,因为两个方法可能同时返回false

“如果无法确定文件是否存在,则 两种方法都返回false。“


您已经在链接中提供了答案

The file is verified to exist. The file is verified to not exist. The file's status is unknown. This result can occur when the program does not have access to the file. If both exists and notExists return false, the existence of the file cannot be verified. 已验证该文件是否存在。 已验证该文件不存在。 文件的状态未知。当程序无法访问该文件时,可能会出现此结果。 如果exists和notExists都返回false,则无法验证文件是否存在。
这意味着如果
exists()
notExists()
返回true,则可以确定结果,如果返回false,则表示无法确定状态。因此,如果要检查是否存在,请使用适当的方法。

假设您要访问某个位置的现有文件。如果要确保访问不会因为文件不存在而失败,则调用exists(path,…)并仅在返回true时继续


假设您想在某个位置创建一个新文件。如果您想确保创建不会因为文件的存在而失败,那么可以调用notExists(path,…)并仅在返回true时继续

请注意,对exists的否定处理第二种情况与notExists()的传递方式不同,它不是一种保证。反之亦然!notExists在第一个场景中。

文件。exists(…)
文件。notExists(…)
不是冗余的,但提供了不同的信息,如下面的代码所示

 LinkOption linkOptions[] = new LinkOption[] { LinkOption.NOFOLLOW_LINKS };
    Path filePath = Paths.get("application.properties");
    if (Files.exists(filePath, linkOptions))
    {
      System.out.println("file exists!");
    } else if (Files.notExists(filePath, linkOptions))
    {
      System.out.println("file does not exist!");
    } else
    {
      System.out.println("file's status is unknown!");
    }

你在哪个公司工作?java.io.*没有带有notExists()方法的File类。java.nio.File.Files--jdk7它是文件,而不是文件。您提供的链接就在这里说明了这一点:如果存在并且notExists返回false,则无法验证文件的存在。请阅读您链接的其余文档。当您测试文件的存在性时,有三种可能的结果:该文件被验证为存在。该文件被验证为不存在。该文件的状态未知。当程序无法访问该文件时,可能会出现此结果。如果exists和notExists都返回false,则无法验证该文件的存在性当然,我不认为我所说的notExist()是不必要的!当存在exist()方法时,使用notExist()可以实现什么?请注意,这两个方法的结果都立即过时。因此,他们会检查(在调用时有效)文件是否存在。分别而言,这是您可以通过它们实现的。如果没有
notExists
,则调用
exists
,如果返回false,则表明文件不存在。但是正如JavaDoc所说,这个结论是不正确的(因为
notExists
可能同时返回false)。是的,这有点让人困惑:)OK.if exist()在文件存在的情况下会返回true,如果不存在则返回false,并抛出安全异常IMHO可能比当前的设计更清晰、更容易理解。OK每个人都可以发表意见。我不是在为任何设计决策辩护。只是想回答你的问题。谢谢你,伙计!我的主要问题是关于设计。把两个不同的问题放在一起是我的错误:)。也许是因为我无法理解这些方法的意图。现在我听上去很清楚:)当然我不认为我说的是notExist()是不可靠的!当存在exist()方法时,您可以使用notExist()实现什么?由于
exists()==false
不能证明文件不存在,因此您可以使用
notExists()
检查文件是否不存在的情况,例如,在创建新文件之前。我知道了!然而仍然不清楚API为什么会这样设计?如果存在()如果文件存在,则返回true,如果不存在,则返回false,并抛出安全异常IMHO可能比当前的设计更清晰、更容易理解。他们希望避免在方法无法执行检查时抛出
IOException
,因此他们决定使用两种方法来消除
false
结果。