天天看點

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一2.5.6 通路目錄中的項

靜态的Files.list方法會傳回一個可以讀取目錄中各個項的Stream對象。目錄是被惰性讀取的,這使得處理具有大量項的目錄可以變得更高效。

因為讀取目錄涉及需要關閉的系統資源,是以應該使用try塊:

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一2.5.6 通路目錄中的項

list方法不會進入子目錄。為了處理目錄中的所有子目錄,需要使用File.walk方法。

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一2.5.6 通路目錄中的項

下面是加壓後的src.zip樹的周遊樣例:

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一2.5.6 通路目錄中的項

正如你所見,無論何時,隻要周遊的項是目錄,那麼在進入它之前,會繼續通路它的兄弟項。

可以通過調用File.walk(pathToRoot, depth)來限制想要通路的樹的深度。兩種walk方法都具有FileVisitOption...的可變長參數,但是你隻能提供一種選項:FOLLOW_LINKS,即跟蹤符号連結。

這段代碼使用了Files.walk方法來将一個目錄複制到另一個目錄:

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一2.5.6 通路目錄中的項

遺憾的是,你無法很容易地使用Files.walk方法來删除目錄樹,因為你需要在删除父目錄之前必須先删除子目錄。下一節将展示如何克服此問題。