我在想:
我在 Java 中詢問當前檔案的絕對路徑后會發生什么?
String s = File(".").getAbsolutePath();解釋器如何在檔案系統中找到當前檔案的路徑?是否有一些作業系統系統呼叫?
它會回傳罐子的路徑嗎?或者有時它可以回傳編譯前檔案所在的路徑?
uj5u.com熱心網友回復:
每個行程都有一個“當前目錄”。
在行程中,路徑.指向當前目錄。
當前目錄表示的實際路徑是(可以是)創建行程的系統呼叫的引數(參見ProcessBuilder示例),或者它可以從創建行程的行程繼承。
當前目錄是行程的一個屬性,與jar檔案的位置完全無關。這兩條路徑可能會巧合。
不要求.路徑參考可寫位置,或者實際上是檔案系統中的任何位置。甚至可能沒有檔案系統。也就是說,路徑.根本不需要存在。
uj5u.com熱心網友回復:
-
.并且..有當前作業目錄,它在執行時可能會有所不同,例如System.getProperty("user.dir")在 IDE 中和單機版中。.與jar的位置無關,而是在哪個目錄下java下啟動。
因此路徑“a/./b/../c”將變為“a/c”。由于有磁盤作業系統,
...因此可能會進行本機呼叫。此外,Windows 可能希望將 POSIX 替換/為\. 字串到檔案將始終在運行時完成。然而,應用程式在哪里啟動,當前作業目錄或
.- 取決于,實際上是不同的。從來沒有在編譯時,甚至static File f = new File("./readme.txt");在第一次加載類時創建一個物件。
這里File是一個物理磁盤檔案的類。
一個更通用的類 ,Path的優勢在于它還可以在 zip 檔案或任何提供檔案系統視圖的可行 URI 中運行其路徑。
所以我將Path用于進一步的解釋。有一個有價值的實用程式類Files,帶有路徑操作,允許您將一些檔案從 zip 存檔中復制到硬碟上的某個位置。
Path.absoluteFile是獲取絕對路徑的 Path 版本(取決于檔案系統視圖)。
Path toRealPath?(LinkOption... options)當符號鏈接需要替換為實際的物理路徑時,帶有可選選項的磁盤操作本機呼叫(對于檔案) 。/a/b.lnk/c實際上可能是/a/d/e/c。如果您想檢測路徑是否意外地轉義了某些受限制的目錄,則此呼叫很重要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458900.html
