- Java核心技術·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 478字
- 2020-10-30 18:10:44
2.5.6 訪問目錄中的項
靜態的Files.list方法會返回一個可以讀取目錄中各個項的Stream<Path>對象。目錄是被惰性讀取的,這使得處理具有大量項的目錄可以變得更高效。
因為讀取目錄涉及需要關閉的系統資源,所以應該使用try塊:

list方法不會進入子目錄。為了處理目錄中的所有子目錄,需要使用File.walk方法。
下面是加壓后的src.zip樹的遍歷樣例:

正如你所見,無論何時,只要遍歷的項是目錄,那么在進入它之前,會繼續訪問它的兄弟項。
可以通過調用File.walk(pathToRoot,depth)來限制想要訪問的樹的深度。兩種walk方法都具有FileVisitOption...的可變長參數,但是你只能提供一種選項:FOLLOW_LINKS,即跟蹤符號鏈接。
注意:如果要過濾walk返回的路徑,并且你的過濾標準涉及與目錄存儲相關的文件屬性,例如尺寸、創建時間和類型(文件、目錄、符號鏈接),那么應該使用find方法來替代walk方法。可以用某個謂詞函數來調用這個方法,該函數接受一個路徑和一個BasicFileAttributes對象。這樣做唯一的優勢就是效率高。因為路徑總是會被讀入,所以這些屬性很容易獲取。
這段代碼使用了Files.walk方法來將一個目錄復制到另一個目錄:

遺憾的是,你無法很容易地使用Files.walk方法來刪除目錄樹,因為你需要在刪除父目錄之前必須先刪除子目錄。下一節將展示如何克服此問題。
推薦閱讀
- 數據結構和算法基礎(Java語言實現)
- 體驗設計原理:行為、情感和細節
- Mastering PHP Design Patterns
- Linux環境編程:從應用到內核
- 人人都是網站分析師:從分析師的視角理解網站和解讀數據
- PLC編程與調試技術(松下系列)
- Mastering JBoss Enterprise Application Platform 7
- Java Web開發就該這樣學
- ServiceNow:Building Powerful Workflows
- Natural Language Processing with Python Quick Start Guide
- Python函數式編程(第2版)
- Visual Basic程序設計全程指南
- Advanced Python Programming
- UML軟件建模
- 打造流暢的Android App