ホームページ >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 フィルターを受け入れ、ファイルに基づいたより効率的な走査を可能にします属性.

コード例:

Files.walk() を使用すると、次のように指定されたディレクトリにあるすべての通常のファイルを再帰的に一覧表示できます。

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

条件付きフィルタリング(オプション):

ファイル属性のフィルタリングが必要な場合、Files.find() により効率が向上します:

Files.find(Paths.get(path),
           Integer.MAX_VALUE,
           (filePath, fileAttr) -> fileAttr.isRegularFile())
        .forEach(System.out::println);

パフォーマンスに関する考慮事項:

Files.walk() と Files.find() は、実際には通常同じように動作します。ただし、属性に基づいてフィルタリングする場合は、Files.find() の方がわずかに効率的である可能性があります。

追加メモ:

  • Files.walk() は、ストリームを提供します。制限、グループ化、マッピングなどのさらなる処理のためのベースの柔軟性。
  • Files.find() は専用のフィルターを提供します。インターフェイス。複雑な属性チェックを簡素化できます。

以上がJava 8 の `Files.walk()` と `Files.find()` は再帰的なファイルのリストをどのように効率化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。