1. ホーム

[解決済み】Javaでファイルを再帰的にリストする

2022-03-28 03:38:43

質問

Javaでディレクトリ以下の全ファイルを再帰的にリストアップするにはどうしたらいいですか?フレームワークは何かユーティリティを提供しますか?

ハック的な実装を多く見かけました。しかし、フレームワークからのものや ニオ

解決方法は?

Java 8は、ツリー内のすべてのファイルを処理するための素晴らしいストリームを提供します。

Files.walk(Paths.get(path))
        .filter(Files::isRegularFile)
        .forEach(System.out::println);

これは、ファイルをトラバースする自然な方法を提供します。これはストリームなので、結果に対してリミット、グループ化、マッピング、早期終了など、あらゆる素晴らしいストリーム操作が可能です。

アップデイト : また、次のようなものもあります。 ファイル.find これは BiPredicate の方が、ファイルの属性をチェックする必要がある場合、より効率的かもしれません。

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

JavaDocでは、このメソッドが以下のメソッドよりも効率的であることを示唆しています。 ファイル.ウォーク というのは、事実上同じですが、フィルタの中でファイルの属性も取得している場合、パフォーマンスの違いが観察されるからです。結局のところ、属性でフィルタリングする必要がある場合は ファイル.find そうでない場合は ファイル.ウォーク というのも、オーバーロードがあり、より便利だからです。

テスト : ご要望にお応えして、多くの回答について性能比較を行いました。をチェックしてください。 Github プロジェクトには、結果とテストケースが含まれています。 .