Java|File class 中的 getPath()、getAbsolutePath()、getCanonicalPath()

 

Photo by Jan Antonin Kolar on Unsplash



getPath():定義時寫什麼路徑,它就傳回什麼路徑
getAbsolutePath():傳回絕對路徑,但不會處理相對路徑使用的 " . " 和 " .. ",會保留下來
getCanonicalPath():傳回典範絕對路徑,會將 getAbsolutePath() 路徑中的 " . " 和 " .. " 解析組成正確的絕對路徑



*假設 user.dir 位址為 D:\workspace\java_io

例一:使用相對路徑    .\\src\\test.txt

File file = new File(".\\src\\text.txt");
System.out.println(file.getPath());                          →    .\src\text.txt
System.out.println(file.getAbsolutePath());            →    D:\workspace\java_io\.\src\text.txt
System.out.println(file.getCanonicalPath());          →    D:\workspace\java_io\src\text.txt


例二:使用相對路徑    ..\\src\\test.txt

File file = new File("..\\src\\text.txt");
System.out.println(file.getPath());                          →    ..\src\text.txt
System.out.println(file.getAbsolutePath());            →    D:\workspace\java_io\..\src\text.txt
System.out.println(file.getCanonicalPath());          →    D:\workspace\src\text.txt


例三:使用絕對路徑    D:\\test\\absoluteTest.txt

File file = new File("D:\\test\\absoluteTest.txt");
System.out.println(file.getPath());                          →    D:\test\absoluteTest.txt
System.out.println(file.getAbsolutePath());            →    D:\test\absoluteTest.txt
System.out.println(file.getCanonicalPath());          →    D:\test\absoluteTest.txt



結論:
  1. 當輸入為絕對路徑時,傳回的都是絕對路徑
  2. getPath() 傳回的是 File 建構式中的路徑,輸入什麼就傳回什麼
  3. getAbsolutePath() 傳回的是 user.dir getPath() 的內容
    從上面看:D:\workspace\java_io\.\src\test.txt,D:\workspace\java_io\..\src\test.txt,可以得出
  4. getCanonicalPath() 傳回的是將符號解析後的標準(典範)絕對路徑



- Reference - 

程式前沿 - 詳談java中File類getPath()、getAbsolutePath()、getCanonical的區別




留言