這讓我感到驚訝,但顯然,Windows 上以斜杠開頭的路徑并不被認為是絕對的。您需要指定 c:。但可以肯定的是,和之間是有區別/foo的foo
System.out.println(new File(new File("/folder"), "abc"));
System.out.println(new File(new File("/folder"), "abc").isAbsolute());
\folder\abc
false
這是正確的行為嗎?
我希望能夠識別相對路徑,例如foo,所以我可以預先添加一個默認目錄。但我認為/foo這是一個絕對路徑,不會預先設定默認值
uj5u.com熱心網友回復:
您不需要通過字串比較檢查“isAbsolute”,只需使用Path并使用解決defaultDir.resolve(path)
考慮:
var rel = Path.of("relative");
var abs = Path.of("/absolute");
for (Path dir : List.of(Path.of("."), Path.of("abc"),Path.of("/abc"))) {
System.out.println("dir=" dir);
System.out.println("dir.resolve(" abs ")=" dir.resolve(abs));
System.out.println("dir.resolve(" rel ")=" dir.resolve(rel));
}
這處理在 Windows 或 Linux 上使用另一個可能是相對或絕對路徑(在某種意義上它以路徑分隔符開頭)的默認目錄路徑決議。
從 Linux 運行的示例(Windows 是相同的答案,但帶有 Windows 路徑分隔符)。
dir=.
dir.resolve(/absolute)=/absolute
dir.resolve(relative)=./relative
dir=abc
dir.resolve(/absolute)=/absolute
dir.resolve(relative)=abc/relative
dir=/abc
dir.resolve(/absolute)=/absolute
dir.resolve(relative)=/abc/relative
uj5u.com熱心網友回復:
您可以檢查檔案路徑的開頭是否以“/”開頭,Boolean isPathAbsolute = "/foo".startsWith("/")并使用此變數來決定是否添加默認值!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/460722.html
