轉載自開發者的天空
1. Path的概念
文件系統會把文件進行組織并存放在媒介上,通常是一個或多個硬盤上。目前使用的大多數的文件系統是以樹形的方式來存儲文件的。在樹的頂端是一個(或多個)
根節點,在根節點之下是文件和目錄,目錄下又可以包含文件和目錄。理論上可以這樣一層層的一直嵌套下去(當然實際中是不可能的,例如Windows系統對
路徑的長度有限制)。
下面的圖中展示了一個包含一個根節點的目錄樹。(在Windows系統中支持多個根節點,例如C:\和D:\分別是一個根節點。)
下載
(18.96 KB)
2010-3-16 22:57
Path能夠唯一的標識文件系統中的某一個文件。例如上面圖中的statusReport文件在Windows系統中就可以使用以下的Path來標識:
c:\home\sally\statusReport
在solaris系統中,其path為
/home/sally/statusReport.
Path中的分隔符在不同的文件系統中是不同的,例如在Windows系統中使用\,在Solaris系統中使用/。
Path又可以分為絕對路徑和相對路徑。絕對路徑總是含有根節點和用來定位文件的完整的目錄列表。例如/home/sally/statusReport
就是絕對路徑。相對路徑需要和另外的路徑結合在一起才能夠確定一個文件。例如加哦加哦哦joe/foo就是一個相對路徑,如果沒有其他的信息,程序就沒有
辦法定位這個文件。我們必須說這個是相對/home的相對路徑,這樣我們才能夠找到它。
除了我們熟悉的目錄和文件之外,有一些文件系統中還支持符號鏈接(symbolic link),也稱為symlink或soft
link。一個符號鏈接是一個特殊的文件,它實際上是另外一個鏈接的引用。在大多數情況下符號鏈接對應用程序是透明的,對符號鏈接的操作會自動的重定向到
鏈接所指向的目的地,除非操作是刪除這個符號鏈接、重命名這個符號鏈接或修改符號鏈接的目的地。
在下面的圖中,logFile對于用戶來說就是一個常規的文件,但是實際上是一個符號鏈接,鏈接到dir/logs/HomeLogFile文件。
HomeLogFile是這個鏈接的目的地。
下載 (23.49
KB)
2010-3-16 22:57
不恰當的使用符號鏈接會導致循環引用,例如目錄A是一個符號鏈接,指向目錄B,目錄B下有一個子目錄是符號鏈接,指向目錄A的父目錄。這樣,當程序企圖遞
歸的遍歷整個目錄樹時,就會出問題。幸運的是,這個問題已經被發現了,并且不會導致程序的死循環。
2.Path類
Path類是JDK7新引入的一個類,該類是java.io.file包的基石。
和類的名稱所展示的一樣,Path類就是文件系統中path概念的程序表現。Path對象包含了文件名和目錄列表,這些信息可以用來創建path,并且用
來檢驗、定位和操作文件。
Path實例是和底層操作系統相關的。在Solaris系統中,Path使用Solaris的句法(/home/joe/foo);在Window操作系
統中,Path會使用Window的句法(C:\home\joe\foo)。因此Path不是操作系統無關的。你不能夠比較一個來自Solaris文件
系統的Path和一個來自Windows文件系統的Path并期望它們相等,在目錄結構和文件完全一樣的時候也不行。
Path對應的文件或者目錄可以不存在。我們可以以不同的方式創建Path實例并操作它:擴展路徑、抽取路徑的一部分、和其他的Path比較。我們也可以
檢查Path對應的目錄或文件是否存在、
創建文件或目錄、打開或刪除文件、修改許可權限等。
Path類是能夠區分符號鏈接的。所有的Path的方法要么會檢測是否是符號鏈接并執行不同的操作,或者提供了一個選擇來使用戶能夠配置當遇到符號鏈接的
時候執行什么操作。
Path類提供了很多易于使用的特性,Path類的方法可以分成兩類:
- 路徑操作—返回路徑的一部分如根節點、名稱、父目錄的方法或者其他操作路徑的方法。
- 文件操作—創建文件、打開文件、創建目錄、刪除文件、
拷貝文件等操作的方法。
在下一篇文章中,我們會具體介紹Path類的這些方法。