编辑:
我正在以不同的方式看待这个../并且精神上附加了一个带有目录斜杠的目录路径的想法(所以目录名+ / + ../),它会指向一个目录太远回来了,但现在我看到目录名+ ../在这种情况下实际上是正确的。
我无法在两个文件之间获得正确的相对路径,只有当一个路径是文件而另一个路径是目录时,这是Path.relativize(Path)的正常预期行为吗? JavaDocs提到它适用于Path对象,但没有比这更具体。
这是我的示例代码(在Windows上运行),其中包含对我预期的输出的评论:
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathsTest
{
public static void main(String[] args)
{
Path pathA = Paths.get("C:\\a\\b\\1.txt");
System.out.println(pathA);
Path pathB = Paths.get("C:\\a\\b\\2.txt");
System.out.println(pathB);
Path relativePathBetween = pathA.relativize(pathB);
System.out.println("rel: " + relativePathBetween);
// Outputs "..\2.txt" (for the last print here)
// Expected: "2.txt"
pathA = Paths.get("C:\\a\\b\\1.txt");
pathA = pathA.getParent(); // Obtaining parent here, so C:\a\b
System.out.println(pathA);
pathB = Paths.get("C:\\a\\b\\2.txt");
System.out.println(pathB);
relativePathBetween = pathA.relativize(pathB);
System.out.println("rel: " + relativePathBetween);
// Outputs: "2.txt"
// Expected: "2.txt"
// So why does pathA have to be a directory and not a file?
// Javadocs don't seem to mention that.
}
}
以下是该计划的全部输出:
C:\a\b\1.txt
C:\a\b\2.txt
rel: ..\2.txt
C:\a\b
C:\a\b\2.txt
rel: 2.txt
答案 0 :(得分:1)
../
表示父级,因此在您的第一个示例中,它对应于"C:\\a\\b\\
,您获得的结果看起来很好。
为什么你期望“2.txt”,你会得到Path pathB = Paths.get("C:\\a\\b\\1.txt\\2.txt");
?