Название говорит все. Я хочу, чтобы каталог файлов читался, а затем записывался в TableView. Как это сделать? Я думал о рассмотрении файлов и папок в выбранном каталоге как массиве, а затем открывал и добавлял их один через цикл, но я не знаю, как перевести это в java, стандартные библиотеки не включают полезные методы, кроме открытия одного файла/каталога ,JavaFX - как добавить все файлы из каталога в TableView
ответ
Если вы просто хотите, чтобы получить файлы в каталоге:
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
в виде таблицы.
Но где я должен назначить переменную файла, в которой хранится выбранная директория? –
Где угодно. Я не уверен, что понимаю этот вопрос. –
Согласно второму, рекурсивный метод. Я не вижу никакой файловой переменной. Извините за глупый вопрос, но этот API для меня совершенно неожиданно. Это как открыть каталог в DirectoryChooser, а затем запустить этот метод Files.find и все? –
Вы хотите, чтобы таблица отображала список файлов? Или содержимое файлов, в некотором роде? –
Да, сейчас я пишу музыкальный плеер в JavaFX, так что это так. Я хочу щелкнуть в DirectoryChooser в папке «Музыка», а затем добавить каждую подпапку в mp3 –