2014-09-25 151 views
0

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

+0

你想让表格显示文件列表吗?或者以某种方式来看这些文件的内容? – 2014-09-25 16:11:39

+0

是的,我现在用JavaFX编写音乐播放器,所以情况就是这样。我想在“音乐”文件夹中单击DirectoryChooser,然后将每个子文件夹添加到mp3的 – 2014-09-25 16:47:30

回答

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

+0

但是,我应该在哪里存储所选目录的文件变量? – 2014-09-26 18:45:03

+0

无论你需要它。我不确定我是否理解这个问题。 – 2014-09-26 18:46:39

+0

根据第二种递归方法。我没有看到任何文件变量。对不起愚蠢的问题,但这个API对我来说是非常新的。这就像我在DirectoryChooser中打开目录,然后得到这个Files.find方法,这就是它? – 2014-09-26 18:57:18

相关问题