java - 无法获取两个文件之间的正确相对路径,仅当一个路径是文件而另一个路径是目录时,这是正常的预期行为吗?

标签 java java-7 nio

<小时/>

编辑:

我以不同的方式看待这个 ../,并在心里附上 ../,其目录路径已经带有目录斜杠(因此目录名 +/+ ../),这会将一个目录指向太远的位置,但现在我发现在这种情况下,使用目录名 + ../实际上是正确的。

<小时/>

我无法获得两个文件之间的正确相对路径,只有当一个路径是文件而另一个路径是目录时,这是 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/

相关文章:

java - 如何编写受 JDK bug 影响的 Java 单元测试

java - 如何在Java 7中递归读取文件?

Java 7 Update 21 Applet 问题

java - 如何干净利落地关闭 AsynchronousSocketChannel?

java - 解析 java.nio.files.Path 时忽略前导斜杠的最佳方法是什么

java - 在面板和主机之间发送信息

java - 将泛型数组传递给采用泛型数组的方法

java - 为什么 Java NIO 可以优于标准的 Java 套接字?

java - 如何在jersey-client java中实现重试机制

java - 如何用SVNkit识别SVN路径是目录还是文件?