Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File JavaFX-如何将目录中的所有文件添加到TableView_File_User Interface_Javafx_Filechooser - Fatal编程技术网

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

File JavaFX-如何将目录中的所有文件添加到TableView,file,user-interface,javafx,filechooser,File,User Interface,Javafx,Filechooser,标题说明一切。我想先读取文件目录,然后写入TableView。如何做到这一点?我曾考虑将choosen目录中的文件和文件夹视为数组,然后通过循环逐个打开并添加它们,但我不知道如何将其转换为java,标准库除了打开单个文件/目录外,不包括其他有用的方法。如果您只想获取目录中的文件: TableView<File> table = new TableView<>(); // configure table columns etc File dir = ... ; table.

标题说明一切。我想先读取文件目录,然后写入TableView。如何做到这一点?我曾考虑将choosen目录中的文件和文件夹视为数组,然后通过循环逐个打开并添加它们,但我不知道如何将其转换为java,标准库除了打开单个文件/目录外,不包括其他有用的方法。

如果您只想获取目录中的文件:

TableView<File> table = new TableView<>();
// configure table columns etc
File dir = ... ;
table.getItems().addAll(dir.listFiles());
TableView table=newtableview();
//配置表列等
文件目录=;
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);
}
TableView table=newtableview();
//配置表列等
File fileDir=directoryChooser.showDialog(mainStage);
如果(fileDir!=null){//如果用户选择了以下内容:
Path dir=fileDir.toPath();
int depth=…;//要搜索的最大深度,请使用Integer.MAX_值搜索所有内容
查找(目录、深度、(路径、属性)->
path.getFileName().toString().toLowerCase().endsWith(“.mp3”)//仅选择mp3文件
.forEach(table.getItems()::添加);
}

在最后一个(长)语句中,
Files.find(…)
生成一个(Java8)
流。代码调用该流上的
forEach(…)
,将每个元素添加到表视图中的
项中。

是否希望表显示文件列表?或者文件的内容,在某种程度上?是的,我现在正在用JavaFX编写音乐播放器,就是这样。我想点击“音乐”文件夹中的DirectoryChooser,然后添加每个包含mp3的子文件夹,但我应该在哪里分配文件变量,将所选目录存储在哪里?无论您需要它。我不确定我是否理解这个问题。根据第二个递归方法。我没有看到任何文件变量。很抱歉这个愚蠢的问题,但这个API对我来说是全新的。就像我在DirectoryChooser中打开目录,然后启动这个Files.find方法,就这样?在java.nio API中,使用
Path
代替
File
File
定义了
toPath()
方法(反之亦然),因此您可以执行
File File=directoryChooser.showDialog(…)
如果(file!=null){Path dir=file.toPath();…}
谢谢,现在我可以理解了。还有一件事,在我将文件添加到TableView之前,我需要从方法中获取一些mp3元数据,如艺术家、唱片集名称等。要做到这一点,我必须使每个文件都具有文件类型。如何将每个find by.find元素从路径类型重新返回到文件?我知道可以通过.toFile方法来管理,但在您的代码中我找不到放置它的位置。