Java NIO系列教程(十 五)Java NIO Path
轉載自? Java NIO系列教程(十 五)Java NIO Path
譯文鏈接? 譯者:章筱虎
Java的Path接口是Java NIO2 的一部分,是對Java6 和Java7的 NIO的更新。Java的Path接口在Java7 中被添加到Java NIO,位于java.nio.file包中, 其全路徑是java.nio.file.Path。
一個Path實例代表了一個文件系統中的路徑。一個路徑可以指向一個文件或者一個文件夾。一個路徑可以是絕對路徑或者是相對路徑。絕對路徑是從根路徑開始的全路徑,相對路徑是一個相對其他路徑的文件或文件夾路徑。相對路徑可能會造成一點混亂,但是不要擔心,在本文章中,我會詳細解釋相對路徑的。
不要混淆了文件系統中的路徑 和 操作系統中環境變量的path路徑。java.nio.file.Path實例與環境變量中的path沒有任何關系。
在很多地方java.nio.file.Path接口和java.io.File類是相似的,但是它們有幾個主要的不同。 在很多類中,你可以使用Path 接口替換 file 類使用。
創建一個Path實例
要想使用 一個 Path實例,你必須要先創建一個Path實例,可以使用Paths類 (java.nio.file.Paths)中的靜態方法 Path.get()創建。 下面是一個例子
import java.nio.file.Path; import java.nio.file.Paths;public class PathExample {public static void main(String[] args) {Path path = Paths.get("c:\\data\\myfile.txt");} }注意例子中兩個import語句,為了能夠適應Path實例和Paths類,必須要引入它們。 其次,注意Paths.get(“c:\data\myfile.txt”)方法的調用,這個方法是創建一個Path實例。 換句話說,Paths.get() 方法是一個創建Path實例的工廠方法。
創建一個絕對路徑
以絕對路徑文件作為參數調用Paths.get()工廠方法后就是創建一個絕對Path實例,例子如下
Path path = Paths.get("c:\\data\\myfile.txt");c:\data\myfile.txt就是絕對路徑,由于java中一個 \ 是轉義字符,所以要寫成兩個 \ ,\就是告訴java編譯器變成一個 \ 放到字符串中。
上面的是Windows操作系統中寫法,在Unix操作系統中(Linux, MacOS, FreeBSD 等等),上面路徑類似寫成:
Path path = Paths.get("/home/jakobjenkov/myfile.txt");現在絕對路徑是 /home/jakobjenkov/myfile.txt
如果你在windows系統中使用 以 / 開頭的路徑,那么就會被理解為相對于當前驅動器,
/home/jakobjenkov/myfile.txt會從C盤根目錄開始解析,最終的全路徑就是:
C:/home/jakobjenkov/myfile.txt##創建一個相對路徑
相對路徑是指以一個路徑(基本路徑)指向 一個文件或者文件夾的路徑,它的絕對路徑會結合基本路徑推算 出來。
Java NIO Paths類也可以用來創建相對路徑的實例。你可以是使用Paths.get(basePath, relativePath)方法創建一個相對路徑的實例。
Path projects = Paths.get("d:\\data", "projects");Path file = Paths.get("d:\\data", "projects\\a-project\\myfile.txt");第一行代碼是創建一個指向 d:\data\projects 文件夾路徑的 實例,第二行代碼是創建一個 指向d:\data\projects\a-project\myfile.txt文件路徑的實例。
當使用相對路徑使用,有兩個特別的符號可以被包含在路徑的字符串中,符號如下:
- .
- ..
“.” 代表當前目錄,如果你創建一個相對Path實例:
Path currentDir = Paths.get("."); System.out.println(currentDir.toAbsolutePath());上面例子中Path實例的絕對路徑就是該代碼運行時的目錄的絕對路徑。
如果 . 在 路徑字符串的中間位置,就是指向同一個目錄(譯者注:就相當于不加 . 一樣),例子:
Path currentDir = Paths.get("d:\\data\\projects\.\a-project");上面路徑就是和下面路徑一致
d:\data\projects\a-project.. 代表父目錄或者是上一級目錄,示例:
Path parentDir = Paths.get("..");上面例子中Path實例的絕對路徑就是該代碼運行時的父目錄的絕對路徑。
如果 .. 在路徑字符串的中間位置,相當于指向了上一級目錄,例子:
String path = "d:\\data\\projects\\a-project\\..\\another-project"; Path parentDir2 = Paths.get(path);上面路徑和下面路徑一致
d:\data\projects\another-projecta-project后面的 .. 改變了目錄指向上一級父目錄 project ,然后再參照 父目錄project,指向下一級目錄another-project
. 和 .. 可以在Paths.get() 方法中結合使用,示例
Path path1 = Paths.get("d:\\data\\projects", ".\\a-project");Path path2 = Paths.get("d:\\data\\projects\\a-project","..\\another-project");Path.normalize()方法
Path接口中的normalize()可以標準化一個路徑。標準化意思是解析路徑中的. 和 .. 。例子如下:
String originalPath ="d:\\data\\projects\\a-project\\..\\another-project";Path path1 = Paths.get(originalPath); System.out.println("path1 = " + path1);Path path2 = path1.normalize(); System.out.println("path2 = " + path2);代碼開始使用.. 創建Path實例,使用路徑字符串創建實例后,并把Path實例打印出來(也就是調用Path.toString()方法)。
調用創建的Path實例后,返回一個新的Path實例,這個新的,標準的Path實例最后也打印出來。
上面代碼打印的內容如下:
path1 = d:\data\projects\a-project\..\another-project path2 = d:\data\projects\another-project我們可以看到規范化的路徑沒有包含a-project..多余的部分,移除的部分對于絕對路徑是無關緊要的。
總結
以上是生活随笔為你收集整理的Java NIO系列教程(十 五)Java NIO Path的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 11 月 1 日上线,《帝国时代 II
- 下一篇: 陶琳:很多车主事故后仍选择特斯拉!这是在