4

我正在使用 java 7 的新 Path 对象,但遇到了问题。

我有一个带有基本目录的文件存储系统,并且我创建了自己的相对路径。最后,我只想将这个相对路径存储在某个地方。我遇到了 Path.relativize 的问题。

我有两个用例。1.

Path baseDir = Paths.get("uploads");
Path filename = Paths.get("uploads/image/test.png")

return baseDir.relativize(filename);

这将返回一个完美的 Path image/test.png

但是,用例 2:

Path baseDir = Paths.get("uploads");
Path filename = Paths.get("image/test.png")

return baseDir.relativize(filename);

返回../image/test.png。我只想让它返回“image/test.png”

路径教程中它说

在没有任何其他信息的情况下,假设 2 个 Path 是兄弟姐妹

我想要的是能够检测到这种情况。在这种情况下,我只想返回文件名并忽略 baseDir。

我目前这样解决它,但我希望有更好的方法:

Path rootEnding = getRootDirectory().getName(getRootDirectory().getNameCount() - 1);

for (Path part : path) {
    if (part.equals(rootEnding)) {
        return getRootDirectory().relativize(path);
    }
}

return path;

所以我的问题是,有没有更好的方法来检查这个?

4

2 回答 2

1

尝试添加一个normalize()after relativize()。它似乎打算这样做(删除不必要的 .. 和 . )。不要错过有关 javadoc 中符号链接的注意事项。

于 2012-10-09T11:25:06.173 回答
0

这不是 100% 等同于您上面写的,但我认为它可以满足您的需求。基本上,让我们baseDir成为一个相对路径。假设任何baseDir相对于文件系统的根。然后允许filename来自这个“模拟根”的相对或绝对。

关于什么:

if (filename.startsWith(baseDir)) {
    filename = baseDir.relativize(filename);
}
于 2012-10-09T13:05:16.303 回答