我正在使用java 7的新Path對象,並且遇到問題。Paths之間的java.nio.Path相對化做假設,我無法檢查
我有一個基本目錄的文件存儲系統,我創建了我自己的相對路徑。最後,我想在某處存儲這條相對路徑。雖然我遇到了Path.relativize的問題。
我有兩個用例。 1.
Path baseDir = Paths.get("uploads");
Path filename = Paths.get("uploads/image/test.png")
return baseDir.relativize(filename);
該返回路徑image/test.png
,這是完美的。
然而,用例2:
Path baseDir = Paths.get("uploads");
Path filename = Paths.get("image/test.png")
return baseDir.relativize(filename);
返回../image/test.png
。我只是希望它返回到「圖像/ test.png」
在沒有任何其他信息的,假定2條路徑是兄弟
我想要的是能夠檢測到這種情況。在這種情況下,我只想返回文件名並忽略baseDir。
我目前解決這個問題是這樣的,但我希望能有一個更好的辦法:
Path rootEnding = getRootDirectory().getName(getRootDirectory().getNameCount() - 1);
for (Path part : path) {
if (part.equals(rootEnding)) {
return getRootDirectory().relativize(path);
}
}
return path;
所以我的問題是,有沒有檢查這一點沒有更好的辦法?
我測試了它,它沒有工作。如果不是第一部分,normalize()將只移除「../」。所以一行「example /../ image/test.png」就會變成「image/test.png」。但它不會對「../image/test.png」做任何事情,因爲這是一種有效的方式來達到直接而不是冗餘。 – Vincentz
我應該仔細閱讀你的問題。我嘗試了一個不同的答案。 –