【问题标题】:Why the the isSameMethod() returning true for paths that are not the same?为什么 isSameMethod() 对于不同的路径返回 true?
【发布时间】:2021-02-25 13:41:14
【问题描述】:
try {
System.out.println(Files.isSameFile(Paths.get("/user/home/cobra"),
Paths.get("/user/home/snake"))); //line 1 outputs true

System.out.println(Files.isSameFile(Paths.get("/user/tree/../monkey"),
Paths.get("/user/monkey"))); //line 2 outputs true

System.out.println(Files.isSameFile(Paths.get("/leaves/./giraffe.exe"),
Paths.get("/leaves/giraffe.exe"))); // line 3 outputs true


} catch (IOException e) {
// Handle file I/O exception...
}

在上面的代码中,我预计第 1 行、第 2 行和第 3 行的输出为 false,因为路径不同,但对于所有这些实例都是如此,有人可以解释这是为什么吗?

【问题讨论】:

  • 在 unix 系统上(在 Windows 上也是如此,但不是那么容易),您可以创建符号链接。这意味着路径 X 处的文件与其他路径中的文件相同
  • 无法重现第一个。

标签: java path nio


【解决方案1】:

您不检查路径是否相同,而是检查您的路径是否被评估为同一个文件。对于您的第二个和第三个示例,这些是同一个文件的路径。

您的第一个示例已经过时(我无法重现它)。但是您可能有一个链接文件cobra 链接到另一个文件,反之亦然。所以这可以解释为什么两个路径都被评估为同一个文件。但如果两者是不同的文件或文件夹,您的第一个示例应该打印 false

【讨论】:

  • 我正在做 OCP 书中的示例,据说第一个示例为真的原因是“由于 cobra 是蛇文件的符号链接,第一个示例输出为真。”并且您还在回答中声明“可能有一个链接到另一个文件的链接文件眼镜蛇,反之亦然”?这是什么意思?
  • 您还说“您不检查路径是否相同,但是否将路径评估为同一文​​件”,但我已将同一文件放在目录“C:\ \Users\\shalotte1\\Documents\\cobra" 和 "C:\\Users\\shalotte1\\Documents\\snake" 它仍然输出假
  • 不,它不会验证文件的内容,而是验证路径引导您到达的文件。
猜你喜欢
  • 2018-06-13
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多