JavaFX - 如何将目录中的所有文件添加到TableView

时间:2014-09-25 15:42:01

标签: file user-interface javafx filechooser

标题说全部。我想要读取文件目录,然后写入TableView。这该怎么做?我考虑将选择目录中的文件和文件夹作为数组处理,然后打开并通过循环添加它们但我不知道如何将其转换为java,标准库除了打开单个文件/目录外不包括有用的方法

1 个答案:

答案 0 :(得分:1)

如果您只想将文件放在目录中:

TableView<File> table = new TableView<>();
// configure table columns etc
File dir = ... ;
table.getItems().addAll(dir.listFiles());

如果要递归遍历子目录(到给定深度),请使用java.nio API:

TableView<Path> table = new TableView<>();
// configure table columns etc

File fileDir = directoryChooser.showDialog(mainStage);
if (fileDir != null) { // if the user chose something:
    Path dir = fileDir.toPath() ;
    int depth = ... ; // maximum depth to search, use Integer.MAX_VALUE to search everything
    Files.find(dir, depth, (path, attributes) -> 
        path.getFileName().toString().toLowerCase().endsWith(".mp3")) // select only mp3 files
        .forEach(table.getItems()::add);
}

在最后一个(长)语句中,Files.find(...)生成一个(Java 8)Stream<Path>。代码在该流上调用forEach(...),以在表视图中将每个元素添加到items