Java でディレクトリの下にあるすべてのファイルを再帰的に一覧表示するにはどうすればよいでしょうか? フレームワークにはユーティリティが用意されていますか?
私は多くのハック的な実装を見ました。しかし、フレームワークやニオ
ベストアンサー1
Java 8 は、ツリー内のすべてのファイルを処理するための優れたストリームを提供します。
try (Stream<Path> stream = Files.walk(Paths.get(path))) {
stream.filter(Files::isRegularFile)
.forEach(System.out::println);
}
これにより、ファイルをトラバースする自然な方法が提供されます。ストリームなので、制限、グループ化、マッピング、早期終了などのすべての便利なストリーム操作を結果に対して実行できます。
更新:また、ファイル検索これはバイプレディケートファイル属性をチェックする必要がある場合は、より効率的です。
Files.find(Paths.get(path),
Integer.MAX_VALUE,
(filePath, fileAttr) -> fileAttr.isRegularFile())
.forEach(System.out::println);
JavaDocでは、この方法はより効率的かもしれないと示唆しているが、ファイル.walk実質的には同じですが、フィルタ内でファイル属性も取得している場合はパフォーマンスの違いが見られます。最終的に、属性でフィルタする必要がある場合は、ファイル検索それ以外の場合はファイル.walk主にオーバーロードがあり、より便利だからです。
テスト: ご要望に応じて、多くの回答のパフォーマンス比較を提供しました。結果とテストケースを含む Github プロジェクト。