Path.resolve(Path other)
上的文档声称
如果
other
参数是绝对路径,则此方法通常会返回other
。
我很困惑:为什么?是否有一个真实的用例,证明这个功能是少数?
我有一个反例。假设我们要将文件从一个FileSystem
复制到另一个,并且我们还要保留其路径字符串。例如,如果原始文件位于fs1
的 /foo/bar/readme.txt ,则副本应为 /foo/bar/readme.txt at fs2
。一个显而易见的灵魂是:
public void copyFile(Path fs1path, FileSystem fs2) {
Path fs2path = fs2.getRootDirectories().next();
Path src = fs1path.getAbsolute();
Path dest = fs2path.resolve(src);
Files.copy(src, dest);
}
当然,它不起作用,因为dest
与fs1
而不是fs2
相关联。但上面的代码看起来如此一致!也许,我对Path
及其解决方案缺乏了解?请帮助我渡过难关。
答案 0 :(得分:0)
resolve方法“只是”用于join两条路径。因此,如果传递部分路径(带有root),则该部分路径将附加到“this”路径。如果传递绝对路径,则返回传入的路径。在您的情况下,复制失败,因为目标文件系统上可能不存在fs1path(fs2); resolve方法不会检查路径是否存在。
答案 1 :(得分:0)
Path
总是指某些FileSystem
。要使用Path
作为参数,引用与用于调用方法的FileSystem
不同的Path
,并不像一个典型的用例。因此,如果传递绝对Path
,则该方法无法将其附加到被调用的Path
,只返回参数。
我认为期待Path
中描述的功能引用不同的FileSystem
会很奇怪。我希望Path
能够规范化自身,FileSystem
实现能够将路径的表示转换为Path
,对FileSystem
有效}}
我还没有发现这是用Java实现的,但是这段代码可能就是你想要的:
final Path fs1path = fs1.getPath(fs2path.normalize().toString()
.replace(fs2.getSeparator(), fs1.getSeparator()));