为什么 Path.relativize 在 Java 8 和 Java 11 上表现不同?

Nik*_*las 2 java path java-8 nio2 java-11

为什么该方法relativize上的行为不同?

Path path1 = Paths.get("/a/./b/../image.png");
Path path2 = Paths.get("/a/file.txt");
Path path = path1.relativize(path2);
System.out.println(path);
Run Code Online (Sandbox Code Playgroud)
  • (准确地说是 1.8.0_66)打印../../../../file.txt. 文档
  • (准确地说是 11.0.4)打印../file.txt. 文档

两个版本的 JavaDoc 描述是相同的。我觉得方式对我来说是正确的行为:

  • path1:/a/./b/../image.png归一化到/a/b/../image.png哪个归一化到/a/image.png
  • path2/a/file.txt
  • 的方式浏览来自/a/image.png并且/a/file.txt../file.txt

问题

  1. 如何在来计算应该呢?它不会使路径正常化吗?我不明白如何从 head得到结果。

  2. 为什么这两个版本之间存在根本没有记录的差异?

Hit*_*bat 5

也许这个错误会回答你的问题:https : //bugs.openjdk.java.net/browse/JDK-8066943

这影响了包含 . 或 .. 并针对 Java 9 进行了修复。这就是为什么您会看到 8 和 11 之间的差异。