关于java.nio.Path的resolve方法

时间:2013-05-14 16:00:23

标签: java file io nio

我完全理解使用resolve(path)和relativize(path)。 在下面的片段中,虽然有些事情对我来说不太清楚:

public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attr) throws IOException
        {

        destinationFolder = destinationFolder.resolve(source.relativize(dir));
        Files.copy(dir, destinationFolder,StandardCopyOption.REPLACE_EXISTING);

        return FileVisitResult.CONTINUE;
        }

此代码段取自here(preVisitDirectory方法)。我稍微修改了它,将target的名称更改为destinationFolder

如果destinationFolder为/home/user/Desktop/Destination且source和dir(至少是第一次递归调用)为/home/user/Desktop/ToBeCopied

destinationFolder的结果为/home/user/Desktop/Destination。 这工作正常,它是超级冷却但是我不明白为什么它会从source.relativize(dir)以来回复这个结果;返回../ToBeCopied,然后返回destinationFolder.resolve(../ToBeCopied),它应该返回(不规范化)/home/user/Desktop/Destination/../ToBeCopied因此/home/user/Desktop/ToBeCopied。 现在,如果是我的程序不起作用,/ToBeCopied将自我复制(如果有意义的话)。实际发生的是,在某种程度上,系统采用source.relativize(dir)中使用的相对模式../ToBeCopied并读取类似“返回一步然后回归”的内容,而不是“返回一步然后返回到/ToBeCopied“。为什么会这样呢?逻辑上应该返回/home/user/Desktop/Destination/../ToBeCopied而不是返回/home/user/Desktop/Destination。我错过了什么? 非常感谢提前!

PS:dir是递归方法preVisitDirectory的当前目录,第一个调用与源本身完全相同。

0 个答案:

没有答案