- Java核心技術·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 1224字
- 2020-10-30 18:10:43
2.5.1 Path
Path表示的是一個目錄名序列,其后還可以跟著一個文件名。路徑中的第一個部件可以是根部件,例如/或C:\,而允許訪問的根部件取決于文件系統。以根部件開始的路徑是絕對路徑;否則,就是相對路徑。例如,我們要分別創建一個絕對路徑和一個相對路徑;其中,對于絕對路徑,我們假設計算機運行的是類Unix的文件系統:

靜態的Paths.get方法接受一個或多個字符串,并將它們用默認文件系統的路徑分隔符(類Unix文件系統是/,Windows是\)連接起來。然后它解析連接起來的結果,如果其表示的不是給定文件系統中的合法路徑,那么就拋出InvalidPathException異常。這個連接起來的結果就是一個Path對象。
get方法可以獲取包含多個部件構成的單個字符串,例如,可以像下面這樣從配置文件中讀取路徑:

注意:路徑不必對應著某個實際存在的文件,它僅僅只是一個抽象的名字序列。你在接下來的小節中將要看到,當你想要創建文件時,首先要創建一個路徑,然后才調用方法去創建對應的文件。
組合或解析路徑是司空見慣的操作,調用p.resolve(q)將按照下列規則返回一個路徑:
·如果q是絕對路徑,則結果就是q。
·否則,根據文件系統的規則,將“p后面跟著q”作為結果。
例如,假設你的應用系統需要查找相對于給定基目錄的工作目錄,其中基目錄是從配置文件中讀取的,就像前一個例子一樣。

resolve方法有一種快捷方式,它接受一個字符串而不是路徑:

還有一個很方便的方法resolveSibling,它通過解析指定路徑的父路徑產生其兄弟路徑。例如,如果workPath是/opt/myapp/work,那么下面的調用

將創建/opt/myapp/temp。
resolve的對立面是relativize,即調用p.relativize(r)將產生路徑q,而對q進行解析的結果正是r。例如,以“/home/cay”為目標對“/home/fred/myprog”進行相對化操作,會產生“../fred/myprog”,其中,我們假設..表示文件系統中的父目錄。
normalize方法將移除所有冗余的.和..部件(或者文件系統認為冗余的所有部件)。例如,規范化/home/cay/../fred/./myprog將產生/home/fred/myprog。
toAbsolutePath方法將產生給定路徑的絕對路徑,該絕對路徑從根部件開始,例如/home/fred/input.txt或c:\Users\fred\input.txt。
Path類有許多有用的方法用來將路徑斷開。下面的代碼示例展示了其中部分最有用的方法:

正如你已經在卷Ⅰ中看到的,還可以從Path對象中構建Scanner對象:

注意:偶爾,你可能需要與遺留系統的API交互,它們使用的是File類而不是Path接口。Path接口有一個toFile方法,而File類有一個toPath方法。
java.nio.file.Paths 7
·static Path get(String first,String...more)
通過連接給定的字符串創建一個路徑。
java.nio.file.Path 7
·Path resolve(Path other)
·Path resolve(String other)
如果other是絕對路徑,那么就返回other;否則,返回通過連接this和other獲得的路徑。
·Path resolveSibling(Path other)
·Path resolveSibling(String other)
如果other是絕對路徑,那么就返回other;否則,返回通過連接this的父路徑和other獲得的路徑。
·Path relativize(Path other)
返回用this進行解析,相對于other的相對路徑。
·Path normalize()
移除諸如.和..等冗余的路徑元素。
·Path toAbsolutePath()
返回與該路徑等價的絕對路徑。
·Path getParent()
返回父路徑,或者在該路徑沒有父路徑時,返回null。
·Path getFileName()
返回該路徑的最后一個部件,或者在該路徑沒有任何部件時,返回null。
·Path getRoot()
返回該路徑的根部件,或者在該路徑沒有任何根部件時,返回null。
·toFile()
從該路徑中創建一個File對象。
java.io.File.1.0
·Path toPath()7
從該文件中創建一個Path對象。
- C語言程序設計教程(第2版)
- INSTANT MinGW Starter
- Mastering Julia
- MATLAB定量決策五大類問題
- 手把手教你學C語言
- INSTANT OpenNMS Starter
- JavaScript:Moving to ES2015
- JavaScript 程序設計案例教程
- Statistical Application Development with R and Python(Second Edition)
- jQuery for Designers Beginner's Guide Second Edition
- Julia數據科學應用
- Simulation for Data Science with R
- Python大規模機器學習
- Java多線程并發體系實戰(微課視頻版)
- C/C++代碼調試的藝術(第2版)