当只有一个Path包含根元素时,为什么Java 7的新Path对象不能重新激活?

时间:2011-08-30 10:31:37

标签: java nio java-7

根据java.nio.file.Path

  

如果只有一个路径具有根组件,则无法构建相对路径。

为什么会这样?为什么不可能像这样重新激活:

Path path1 = Paths.get("/home/test");
Path path2 = Paths.get("home");

// throws an IllegalArgumentException
Path path3 = path1.relativize(path2);

我曾想过path3会产生相对路径../。为什么Path返回一个结果,该结果表明如果没有定义根元素,则两个目录位于文件系统中的同一级别,但是,当只有一个路径定义根元素时(如上所示) ,没有相对路径可以确定?

Path path1 = Paths.get("home/test");
Path path2 = Paths.get("user");

// results in ../../user
Path path3 = path1.relativize(path2);

1 个答案:

答案 0 :(得分:5)

非绝对路径相对于某些未指定的基目录。如果你有两条这样的路径,那么想象它们是相对于相同的(但仍未指定)的基本目录是有意义的,然后它就有意义询问一个人相对于另一个人的位置。

另一方面,如果你有两个路径,其中只有一个是绝对路径,例如/home/testhome,则不知道有什么关系。例如,如果基本目录恰好是/home/test/blah,则home表示/home/test/blah/home,因此它应该相对于blah/home。但该方法如何知道如何发明blah(或完全发明其他东西)?

使用相对路径的重点是,我还没告诉你这个路径名的基本目录是什么。期望运行时库猜测我们明确没有告诉它的基本路径将完全违背该语义。