JFileChooser
– это быстрый и простой способ предложить пользователю выбрать файл или место сохранения файла. Ниже приведены несколько простых примеров использования этого класса.
JFileChooser
имеет 6 конструкторов:
JFileChooser()
– пустой конструктор, указывающий на каталог пользователя по умолчаниюJFileChooser(строка)
– использует заданный путьJFileChooser(Файл)
– использует данный файл в качестве путиJFileChooser(представление файловой системы)
– использует заданное представление файловой системыJFileChooser (Строка, представление файловой системы)
– использует указанный путь иПредставление файловой системы
JFileChooser (Файл, представление файловой системы)
– использует данный текущий каталог иПредставление файловой системы
Все различные способы вызова конструктора JFileChooser
//JFileChooser jfc; //String path = "C:\\Users\\Public"; //File file = new File("C:\\Users\\Public"); //FileSystemView fsv = FileSystemView.getFileSystemView(); //jfc = new JFileChooser(); //jfc = new JFileChooser(path); //jfc = new JFileChooser(file); //jfc = new JFileChooser(fsv); //jfc = new JFileChooser(path, fsv); //jfc = new JFileChooser(file, fsv);
Личное предпочтение автора состоит в том, чтобы учитывать Представление файловой системы
. В приведенных ниже примерах мы используем FileSystemView.getfilesystemview()
и указываем на домашний каталог через getHomeDirectory()
. Этот процесс приводит к типу файла. Другими словами, мы используем конструктор JFileChooser(файл)
принимая во внимание Представление файловой системы
.
1. показать*Диалоговое окно() – Открыть или сохранить файл
Пример использования JFileChooser
для получения абсолютного пути к файлу, который пользователь хочет открыть, или для получения местоположения, в котором пользователь хочет сохранить файл:
package com.mkyong.jfileChooser; import java.io.File; import javax.swing.JFileChooser; import javax.swing.filechooser.FileSystemView; public class FileChooser1 { public static void main(String[] args) { JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); int returnValue = jfc.showOpenDialog(null); // int returnValue = jfc.showSaveDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { File selectedFile = jfc.getSelectedFile(); System.out.println(selectedFile.getAbsolutePath()); } } }
Обратите внимание, что два метода showOpenDialog()
и showSaveDialog()
похожи, разница в том, как разработчик обрабатывает каждый из них. По соображениям удобочитаемости я бы не предложил смешивать эти два метода.
Выход:
Когда пользователь переходит в каталог, выбирает файл и нажимает “Открыть”
Выход:
C:\Users\Public\Pictures\pollock.she-wolf.jpg
2. Режим setFileSelectionMode(int) – Выберите файлы или каталоги
С помощью этого метода мы можем ограничить пользователя выбором только одного из каталогов ( JFileChooser.ТОЛЬКО ДИРЕКТОРИИ_
) или только файлы ( JFileChooser.ТОЛЬКО ФАЙЛЫ
) или Файлы и каталоги ( JFileChooser. ФАЙЛЫ И КАТАЛОГИ
). Значение по умолчанию равно FILES_ONLY
. Вот пример, который реализует JFileChooser. ТОЛЬКО ДИРЕКТОРИИ_
:
package com.mkyong.jfileChooser; import javax.swing.JFileChooser; import javax.swing.filechooser.FileSystemView; public class FileChooser2 { public static void main(String[] args) { JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); jfc.setDialogTitle("Choose a directory to save your file: "); jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnValue = jfc.showSaveDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { if (jfc.getSelectedFile().isDirectory()) { System.out.println("You selected the directory: " + jfc.getSelectedFile()); } } } }
Выход:
You selected the directory: C:\Users\Public\Pictures
3. setMultiSelectionEnabled(логическое значение) – Разрешить множественный выбор
Пример, в котором включен множественный выбор. Пользователь выбирает несколько файлов, и программа печатает имена:
package com.mkyong.jfileChooser; import java.io.File; import java.util.Arrays; import javax.swing.JFileChooser; import javax.swing.filechooser.FileSystemView; public class FileChooser3 { public static void main(String[] args) { JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); jfc.setDialogTitle("Multiple file and directory selection:"); jfc.setMultiSelectionEnabled(true); jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); int returnValue = jfc.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { File[] files = jfc.getSelectedFiles(); System.out.println("Directories found\n"); Arrays.asList(files).forEach(x -> { if (x.isDirectory()) { System.out.println(x.getName()); } }); System.out.println("\n- - - - - - - - - - -\n"); System.out.println("Files Found\n"); Arrays.asList(files).forEach(x -> { if (x.isFile()) { System.out.println(x.getName()); } }); } } }
Выход:
Directories found Camera Roll Saved Pictures - - - - - - - - - - - Files Found autumn_rhythm-pollock1.jpg kuNUfO.jpg mona.jpg
4. Фильтры – Ограничивают набор файлов, показываемых пользователю
Всегда удобно ограничить выбор пользователя потребностями программы. Если, например, вашей программе требуются изображения в формате png и gif, было бы хорошей практикой ограничить выбор пользователя только этим. В приведенном ниже примере показано, как этого добиться с помощью пользовательского фильтра FileNameExtensionFilter
:
package com.mkyong.jfileChooser; import javax.swing.JFileChooser; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.filechooser.FileSystemView; public class FileChooser4 { public static void main(String[] args) { JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); jfc.setDialogTitle("Select an image"); jfc.setAcceptAllFileFilterUsed(false); FileNameExtensionFilter filter = new FileNameExtensionFilter("PNG and GIF images", "png", "gif"); jfc.addChoosableFileFilter(filter); int returnValue = jfc.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { System.out.println(jfc.getSelectedFile().getPath()); } } }
Выход:
Как вы можете видеть, пользователю не разрешается выбирать что-либо еще. Каталог, показанный выше, содержит и другие типы изображений, но пользователю отображаются только gif и png.
Каталог выглядит следующим образом:
5. Использование ShowDialog()
Если вам нужно настроить кнопку утвердить, используйте метод ShowDialog()
. Вот пример того, как его использовать:
package com.mkyong.inputDialog; import javax.swing.JFileChooser; import javax.swing.filechooser.FileSystemView; public class FileChooser5 { public static void main(String[] args) { JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); jfc.setDialogTitle("Custom button"); int returnValue = jfc.showDialog(null, "A button!"); if (returnValue == JFileChooser.APPROVE_OPTION) { System.out.println(jfc.getSelectedFile().getPath()); } } }
Выход:
Вы также должны проверить самые простые и наиболее часто используемые методы записи и чтения файлов:
Рекомендации
- JFileChooser – API Java 8
- Представление файловой системы – API Java 8
- Расширение имени файла – API Java 8
Оригинал: “https://mkyong.com/swing/java-swing-jfilechooser-example/”