2016-03-10 2 views
1

Я хотел бы разрешить пользователям моей программы открывать файлы только из определенного каталога в папке проекта. В Stack Overflow я часто нахожу следующее решение: chooser.setInitialDirectory(new File(System.getProperty("user.home"));, но я пытаюсь ссылаться на папку ресурсов в проекте. Я пытался использовать fileChooser.setInitialDirectory(new File("/resources/"));, но получаю java.lang.IllegalArgumentException: Folder parameter must be a valid folder. Как я могу исправить эту проблему?Установить начальную директорию JavaFX FileChooser

+1

Папка 'resources' обычно не является частью развернутого приложения. При развертывании приложения ресурсы будут вложены в файл jar. Вы не можете использовать выбор файла для просмотра содержимого этого файла. –

+0

Хорошо, но как я могу просматривать содержимое другой папки, входящей в состав развернутого приложения? – lilmessi42

+0

Можете ли вы более подробно объяснить, что вы пытаетесь сделать? Вы используете браузер файлов, чтобы позволить пользователю просматривать файловую систему; Дело в том, что содержимое файловой системы неизвестно при создании приложения. Доступные ресурсы известны при компиляции и создании приложения. Поэтому обычно вы не просматриваете ресурсы; ресурсы выбираются в зависимости от состояния приложения. Таким образом, пользователь делает вещи в пользовательском интерфейсе, которые изменяют состояние приложения, и ваш код выбирает из предопределенного набора ресурсов на основе этого состояния. –

ответ

1

Папка resources, и в основном все, что входит в состав развернутого приложения, не может быть доступно для записи или просмотра во время выполнения. По сути, при развертывании приложения все, что вам нужно для запуска приложения, вставляется в файл архива, поэтому resources на самом деле не является папкой, это запись в архив. Вы не можете писать или просматривать такие местоположения.

Если вы хотите, чтобы пользователь мог сохранять файлы в определенном месте, вы должны определить такое местоположение: обычно вы должны сделать это подкаталогом домашнего каталога пользователя. Так, например, вы можете:

File recordsDir = new File(System.getProperty("user.home"), ".myApplicationName/records"); 
if (! recordsDir.exists()) { 
    recordsDir.mkdirs(); 
} 

// ... 

FileChooser chooser = new FileChooser(); 
chooser.setInitialDirectory(recordsDir); 
Смежные вопросы