Иногда в программе требуется реализовать диалоговое окно, которое будет открывать или сохранять файл и для таких целей в JavaFX есть отдельный класс FileChooser. Данный класс реализует данные диалоговые окна посредством вызова методов showOpenDialog() или showSaveDialog().
1. Открытие файла определенного расширения
Ниже покажем пример кода реализации диалогового окна открытия файла определенного расширения или списка расширений
@FXML private void hndlOpenFile(ActionEvent event) { FileChooser fileChooser = new FileChooser();//Класс работы с диалогом выборки и сохранения fileChooser.setTitle("Open Document");//Заголовок диалога FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("HTML files (*.html)", "*.html");//Расширение fileChooser.getExtensionFilters().add(extFilter); File file = fileChooser.showOpenDialog(CodeNote.mainStage);//Указываем текущую сцену CodeNote.mainStage if (file != null) { //Open System.out.println("Процесс открытия файла"); } }
2. Диалоговое окно сохранения файла определенного расширения
Ниже покажем пример кода реализации диалогового окна сохранения файла определенного расширения или списка расширений
@FXML private void hndlOpenFile(ActionEvent event) { FileChooser fileChooser = new FileChooser();//Класс работы с диалогом выборки и сохранения fileChooser.setTitle("Save Document");//Заголовок диалога FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("HTML files (*.html)", "*.html");//Расширение fileChooser.getExtensionFilters().add(extFilter); File file = fileChooser.showSaveDialog(CodeNote.mainStage);//Указываем текущую сцену CodeNote.mainStage if (file != null) { //Save System.out.println("Процесс открытия файла"); } }
3. Дополнительно
Для того, чтобы открывать или сохранять несколько видов расширений необходимо использовать мульти-фильтр
fileChooser.getExtensionFilters().addAll( new FileChooser.ExtensionFilter("All Images", "*.*"), new FileChooser.ExtensionFilter("HTML Documents", "*.html"), new FileChooser.ExtensionFilter("JPG", "*.jpg"), new FileChooser.ExtensionFilter("PNG", "*.png") );
Для того, чтобы открывать несколько файлов необходимо использовать диалоговое окно мульти-выборки, который вызывается посредством метода showOpenMultipleDialog
List<File> list = fileChooser.showOpenMultipleDialog(CodeNote.mainStage); if (list != null) { for (File file : list) { openFile(file); } }
Для того, чтобы узнать какое расширение выбрано в процессе сохранения или открытия используем getSelectedExtensionFilter(), а для того, чтобы сравнить существующие расширения используем метод getExtensionFilters().get(index), где index — порядковый номер регистрированного расширения
if(fileChooser.getSelectedExtensionFilter().equals(fileChooser.getExtensionFilters().get(0))){ if (!file.getPath().endsWith(".html")) { file = new File(file.getPath() + ".html"); } System.out.println("Процесс сохранения html файла"); }else if(fileChooser.getSelectedExtensionFilter().equals(fileChooser.getExtensionFilters().get(1))) { if (!file.getPath().endsWith(".png")) { file = new File(file.getPath() + ".png"); } System.out.println("Процесс сохранения png файла"); }