1. 程式人生 > >JAVA nio 2 定義 Path 類

JAVA nio 2 定義 Path 類

一旦確認了檔案系統上的一個檔案或目錄,那麼就可以定義一個 Path 類來指向它。定義 Path 類可以使用絕對路徑、相對路徑、路徑中帶有一個點號“.”(表示當前目錄)、路徑中帶有兩個點“..”(表示上一層目錄)等。定義 Path 類最簡單的方法是呼叫輔助類 Paths 的 get() 方法。下面將介紹使用不同的方式來得到 C:\rafaelnadal\tournaments\2009\BNP.txt 檔案的 Path 物件。

定義絕對路徑

絕對路徑(有時也成為全路徑)是指包含了根目錄以及所有子目錄以及檔名的檔案路徑。在 NIO.2 中定義絕對路徑只需要一行程式碼,下面的例子定義了 C:\rafaelnadal\tournaments\2009 目錄下的 BNP.txt 檔案(測試的時候,這個檔案有可能不存在):

1 Path path=Paths.get("C:/rafaelnadal/tournaments/2009/BNP.txt");

get() 方法也支援將檔案路徑分塊。NIO 將會自動重建檔案路徑。如果你將檔案路徑分塊,那麼你就不用再考慮檔案路徑分隔符。前面的絕對路徑例子中的路徑可以被分塊改寫為:

1 2 3 Path path=Paths.get("C:/rafaelnadal/tournaments/2009","BNP.txt"); Path path=Paths.get("C:","rafaelnadal/tournaments/2009","BNP.txt"); Path path=Paths.get("C:","rafaelnadal","tournaments","2009","BNP.txt");

定義根目錄的相對路徑

相對路徑是絕對路徑中的一部分。相對路徑經常在建立 web 頁面的時候使用。相對路徑比絕對路徑使用更廣泛。定義當前檔案儲存根目錄的相對路徑,此路徑需要由檔案分隔符開始。在下面的例子中,如果當前檔案儲存的根 目錄是 C: ,那麼檔案的絕對路徑就是 C:\rafaelnadal\tournaments\2009\BNP.txt:

1 2 Path path=Paths.get("/rafaelnadal/tournaments/2009/BNP.txt"); Path path=Paths.get("/rafaelnadal","tournaments/2009/BNP.txt");

定義工作目錄的相對路徑

當你定義當前工作目錄的相對路徑的時候,此路徑不需要由檔案分隔符開始。假設你的工作目錄是 C: 根目錄下的 /ATP 目錄,那麼下面的程式碼片段定義的檔案是 C:\ATP\rafaelnadal\tournaments\2009\BNP.txt:

1 2 Path path=Paths.get("rafaelnadal/tournaments/2009/BNP.txt"); Path path=Paths.get("rafaelnadal","tournaments/2009/BNP.txt");

使用萬用字元定義路徑

一般情況下,使用一個點“.”表示當前目錄,使用兩個點“..”表示父目錄這是公認的做法。在 NIO.2 中可以使用 Path.normalize() 方法來消除路徑中的冗餘(即刪除路徑中的 /. 或 /..):

1 2 Path path=Paths.get("C:/rafaelnadal/tournaments/2009/dummy/../BNP.txt").normalize(); Path path=Paths.get("C:/rafaelnadal/tournaments/./2009/dummy/../BNP.txt").normalize();

如果你想看看 normalize() 方法的效果,可以分別列印下面兩行程式碼執行後的路徑:

1 2 Path noNormalize=Paths.get("C:/rafaelnadal/tournaments/./2009/dummy/../BNP.txt"); Path normalize=Paths.get("C:/rafaelnadal/tournaments/./2009/dummy/../BNP.txt").normalize();

使用 System.out.println() 分別列印兩個結果,可以看到 normalize 方法移除了冗餘資訊:

1 2 C:\rafaelnadal\tournaments\.\2009\dummy\..\BNP.txt C:\rafaelnadal\tournaments\2009\BNP.txt

使用 URI 定義路徑

在有的情況下,你可能需要從 URI 建立 Path 物件。可以通過 URI.create() 從給定的字串建立 URI 物件,然後將 URI 物件作為引數傳給 Paths.get() 方法。如果你需要將瀏覽器的位址列輸入的資訊封裝進字串的話,這一招非常有用:

1 2 3 4 import java.net.URI;Path path=Paths.get(URI.create("file:///rafaelnadal/tournaments/2009/BNP.txt")); Path path=Paths.get(URI.create("file:///C:/rafaelnadal/tournaments/2009/BNP.txt"));

使用 FileSystems.getDefault().getPath() 定義路徑

另一個建立 Path 物件的通用方法是通過 FileSystem 類。首先呼叫 getDefault() 方法獲得預設 FileSystem—— NIO.2 將會生成可以訪問預設檔案系統的通用物件。然後,呼叫 getPath() 方法(前面例子中使用的 Paths.get() 方式是這種方式的簡寫形式):

1 2 3 4 5 6 7 import java.nio.file.FileSystems;Path path=FileSystems.getDefault().getPath("/rafaelnadal/tournaments/2009","BNP.txt"); Path path=FileSystems.getDefault().getPath("/rafaelnadal/tournaments/2009/BNP.txt"); Path path=FileSystems.getDefault().getPath("rafaelnadal/tournaments/2009","BNP.txt"); Path path=FileSystems.getDefault().                        getPath("/rafaelnadal/tournaments/./2009","BNP.txt").normalize();

獲取 Home 目錄的路徑

當你在需要獲得 Home 目錄的路徑的時候,可以使用下面的樣例程式碼(返回的 Home 目錄依賴不同的機器和不同的作業系統):

1 Path path=Paths.get(System.getProperty("user.home"),"downloads","game.exe");

在我的 Windows 7 機器上,將會返回 C:\Users\Terry\downloads\game.exe,在我的 Linux 上,將會返回 /home/Terry/downloads/game.exe。