<小时/>
编辑:
我以不同的方式看待这个 ../,并在心里附上 ../,其目录路径已经带有目录斜杠(因此目录名 +/+ ../),这会将一个目录指向太远的位置,但现在我发现在这种情况下,使用目录名 + ../实际上是正确的。
<小时/>我无法获得两个文件之间的正确相对路径,只有当一个路径是文件而另一个路径是目录时,这是 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
最佳答案
../
表示父级,因此在第一个示例中它对应于 "C:\\a\\b\\
并且您得到的结果看起来不错。
为什么您期望通过 Path pathB = Paths.get("C:\\a\\b\\1.txt\\2.txt");
得到“2.txt”?
关于java - 无法获取两个文件之间的正确相对路径,仅当一个路径是文件而另一个路径是目录时,这是正常的预期行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23476378/