首頁 >Java >java教程 >Java 8 的 `Files.walk()` 和 `Files.find()` 如何簡化遞迴檔案清單?

Java 8 的 `Files.walk()` 和 `Files.find()` 如何簡化遞迴檔案清單?

Susan Sarandon
Susan Sarandon原創
2024-12-19 09:02:11113瀏覽

How Can Java 8's `Files.walk()` and `Files.find()` Streamline Recursive File Listing?

Java 中的遞歸文件列表:通過框架增強功能進行簡化

背景:

迭代所有檔案都放在一個目錄結構中是Java程式設計中的常見需求。然而,許多實現往往很複雜並且缺乏框架支援。

框架解決方案(Java 8):Files.walk() 和 Files.find()

Java 8.引入優雅的檔案機制iteration:

  • Files.walk():遞歸遍歷目錄,提供代表單一檔案的 Path 物件流。
  • Files.find ():接受BiPredicate 過濾器,實現基於文件更有效率的遍歷attribute.

程式碼範例:

程式碼範例:
try (Stream<Path> stream = Files.walk(Paths.get(path))) {
    stream.filter(Files::isRegularFile)
          .forEach(System.out::println);
}

利用Files.walk(),可以遞歸列出指定目錄下的所有常規文件,如下所示:

條件過濾(可選):
Files.find(Paths.get(path),
           Integer.MAX_VALUE,
           (filePath, fileAttr) -> fileAttr.isRegularFile())
        .forEach(System.out::println);

如果需要檔案屬性過濾,Files.find()可以提高效率:

效能注意事項:

Files.walk() 和 Files.find() 在實務上通常表現相同。然而,當基於屬性進行篩選時,Files.find() 可能會稍微更有效率。

  • 附加說明:
Files.walk() 提供了流-基於進一步處理的靈活性,例如限制、分組或映射。 Files.find() 提供了專用的過濾器接口,可以簡化複雜的屬性檢查。

以上是Java 8 的 `Files.walk()` 和 `Files.find()` 如何簡化遞迴檔案清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn