官术网_书友最值得收藏!

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方法來刪除目錄樹,因為你需要在刪除父目錄之前必須先刪除子目錄。下一節將展示如何克服此問題。

主站蜘蛛池模板: 开江县| 霞浦县| 栖霞市| 横峰县| 滕州市| 横山县| 喜德县| 宁安市| 长泰县| 宁乡县| 孟州市| 慈溪市| 淳化县| 包头市| 株洲市| 北安市| 邵武市| 佛学| 唐海县| 临洮县| 嘉黎县| 弋阳县| 望江县| 铜陵市| 敦化市| 潍坊市| 都匀市| 喀什市| 乌鲁木齐市| 北安市| 寻甸| 新邵县| 惠水县| 广南县| 安庆市| 阜新市| 河源市| 咸阳市| 三穗县| 泰来县| 安岳县|