# 什么是路徑?
文件系統以某種形式的媒體(通常為一個或多個硬盤驅動器)存儲和組織文件,使得它們可以容易地被檢索。
目前使用的大多數文件系統將文件存儲在樹形(或分層)結構中。在樹的頂部是一個(或多個)根節點。
在根節點下,有文件和目錄(Microsoft Windows 中的文件夾)。每個目錄可以包含文件和子目錄,
這些文件和子目錄又可以包含文件和子目錄,等等,可能幾乎是無限的深度
本節包括以下內容: 什么是路徑?
相對還是絕對?
符號鏈接
# 什么是路徑?
下圖顯示了包含單個根節點的示例目錄樹。Microsoft Windows 支持多個根節點。
每個根節點映射到一個卷,如 C:\ 或 D:\。Solaris OS 支持單個根節點,以斜杠(/)字符表示。
通過文件系統的路徑來識別文件,從根節點開始。例如,statusReport 上圖中的文件在 Solaris 操作系統中通過以下符號來描述:
在 Microsoft Windows 中
用于分隔目錄名稱(也稱為分隔符)的字符特定于文件系統:Solaris OS 使用正斜杠(/),Microsoft Windows 使用反斜杠斜杠(\)。
# 相對還是絕對?
路徑是 相對 的或 絕對 的。
絕對路徑始終包含找到文件所需的根元素和完整目錄列表。例如,/home/sally/statusReport 是絕對路徑。找到該文件所需的所有信息都包含在路徑字符串中。
相對路徑需要與其他路徑組合才能訪問文件。例如,joe/foo 是相對路徑。沒有更多信息,程序無法可靠地定位 joe/foo 文件系統中的目錄。
# 符號鏈接
文件系統對象通常是目錄或文件。每個人都熟悉這些對象。但是一些文件系統也支持符號鏈接的概念。也稱為軟鏈接。
一個符號鏈接 是引用另一個文件的特殊的一個文件。在大多數情況下,符號鏈接對應用程序是透明的,
符號鏈接的操作將自動重定向到鏈接的目標。(指向的文件或目錄被稱為 鏈接的目標。)異常是當符號鏈接被刪除或重命名時,
鏈接本身被刪除或重命名,而不是鏈接的目標。
在下圖中,logFile 似乎是一個普通的文件給用戶,但它實際上是一個象征性的鏈接 dir/logs/HomeLogFile。HomeLogFile 是 鏈接的目標。
符號鏈接通常對用戶是透明的。讀取或寫入符號鏈接與讀取或寫入任何其他文件或目錄相同。
在現實世界的場景中,大多數文件系統自由地使用符號鏈接。偶爾,一個不小心創建的符號鏈接可能導致循環引用。
當鏈接的目標指向原始鏈接時,會發生循環引用。循環引用可能是間接的: 如:目錄 a 指向目錄 b。
b 又指向 c。c 指向 a。循環引用可能導致程序遞歸目錄結構時遭到破壞。但是,這種情況已被考慮,并且不會導致您的程序無限循環。
下一節討論 java 平臺中文件 I/O 的核心類 - Path 類