2014-09-25 60 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

相關問題