0

关于Path.resolve(Path other)索赔的文件

如果other参数是绝对路径,则此方法通常会返回other

我不解:为什么?是否有一个真实的用例证明此功能很少?

我有一个反例。假设我们要将一个文件从一个文件复制FileSystem到另一个文件,而且我们想保留它的路径字符串。例如,如果原始文件是/foo/bar/readme.txt at fs1,则副本应是/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);
}

当然,它不起作用,因为destfs1而不是关联fs2。但是上面的代码看起来非常一致!也许,这是我对Paths 及其分辨率的理解不足?请帮助我度过这个难关。

4

2 回答 2

0

APath总是指一些FileSystem。使用Pathas 参数来引用与调用方法不同FileSystem的参数,这Path听起来并不像典型的用例。因此,如果传递了绝对值Path,则该方法无法将其附加到被Path调用的对象,而只会返回参数。

我认为期望您在 a 中描述的功能Path指的是不同的FileSystem. 我宁愿期望 aPath能够对其自身进行规范化,并且FileSystem实现能够将路径的表示形式转换为Path有效的FileSystem

我还没有完全发现它是用 Java 实现的,但也许这个片段是关于你正在寻找的:

    final Path fs1path = fs1.getPath(fs2path.normalize().toString()
            .replace(fs2.getSeparator(), fs1.getSeparator()));
于 2015-04-13T10:19:41.690 回答
0

resolve 方法“只是”用于连接两条路径。因此,如果您传递部分路径(没有根),则该部分路径将附加到“this”路径。如果您传递绝对路径,则当然会返回传入的路径。在您的情况下,复制失败,因为目标文件系统(fs2)上可能不存在 fs1path;resolve 方法不检查路径是否存在。

于 2015-04-08T15:05:48.873 回答