java.io.File 類文件反覆提到「抽象路徑名」,許多開發者只理解相對/絕對路徑,卻搞不清這個概念的邊界。
\、Linux 用 /、macOS 也用 /,甚至有磁碟機代號 C:。File 內部將路徑拆解為:
C:\,UNIX 為 /。File.separator 分隔。// 同一段代碼,Windows/Linux/macOS 皆可運行
File f = new File("user", "docs", "report.txt");
// 抽象路徑名邏輯上相同,具體路徑自動適配:
// Windows -> user\docs\report.txt
// Linux -> user/docs/report.txt
如 Windows 的「桌面」、「下載」、「文檔」等 已知資料夾,其物理位置隨使用者、版本、策略而變,無法寫死。系統透過環境變數或 Shell API 解析,對應用程式而言就是「抽象路徑」。
| 方法 | 回傳 | 說明 |
|---|---|---|
getPath() | String | 抽象路徑名的字串形式(建構時傳什麼回什麼) |
getAbsolutePath() | String | 解析為絕對路徑字串 |
getCanonicalPath() | String | 唯一標準化路徑(解析 . ..、符號連結) |
toURI() | URI | 轉為標準 URI 格式 |
「抽象路徑名」= 與平台無關的邏輯路徑模型。理解這點,處理跨平台檔案操作、相對/絕對路徑轉換、標準化路徑時就不會混淆。