<AI>
Java NIOの Files.walkFileTree または Files.walk を利用すると、指定ディレクトリ以下のサブフォルダを再帰的に探索し、
効率よくファイル一覧を取得して画面(JavaFXの ListView など)に表示できます。
以下に Files.walk を使ってファイルパスを取得し、ListView に表示するシンプルで実用的な実装例を記載します。
実装例:指定フォルダ以下のファイルを ListView に表示する
java
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class FileViewerApp extends Application {
@Override
public void start(Stage primaryStage) {
// 表示したい対象のフォルダパスを指定
Path rootDir = Paths.get("C:/your/target/directory");
ListView listView = new ListView<>();
ObservableList fileList = FXCollections.observableArrayList();
// Files.walk を使って再帰的にファイルを探索しリストに格納
try (Stream paths = Files.walk(rootDir)) {
paths.filter(Files::isRegularFile) // ファイルのみに絞り込む場合
.forEach(path -> fileList.add(path.toString()));
} catch (IOException e) {
e.printStackTrace();
}
listView.setItems(fileList);
VBox root = new VBox(listView);
Scene scene = new Scene(root, 400, 300);
primaryStage.setTitle("再帰的ファイルビューア");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
ポイント・解説
Files.walk(): Java 7で導入された高速かつ簡潔にファイルツリーを辿るためのメソッドです。
Stream APIで処理できるため、フィルター条件の追加などが容易に行えます。
リソースの解放: ストリームを開いたままにするとファイルロックなどの原因になるため、try-with-resources 構文で必ず close() されるように記述しています。
フィルター (filter): ディレクトリそのものとファイルの両方が対象となるため、.filter(Files::isRegularFile) を追加してファイルのみを抽出しています
(フォルダ名も一緒に表示したい場合はこの行を削除してください)。
JavaFXへの適用: 取得したパスの文字列表現(path.toString())を ObservableList に追加し、それを ListView にセットすることで画面に表示します。
また、より複雑な条件や階層ごとの処理を行いたい場合は、Oracleの公式リファレンスである Files.walkFileTree を用いたVisitorパターンの実装が便利です