Java Swing - пример JFileChooser
JFileChooser - это быстрый и простой способ предложить пользователю выбрать файл или место для его сохранения. Ниже приведены несколько простых примеров использования этого класса.
JFileChooser имеет 6 конструкторов:
-
JFileChooser()- пустой конструктор, указывающий на каталог пользователя по умолчанию -
JFileChooser(String)- использует заданный путь -
JFileChooser(File)- использует данный файл как путь -
JFileChooser(FileSystemView)- использует данный FileSystemView -
JFileChooser(String, FileSystemView)- использует заданный путь иFileSystemView -
JFileChooser(File, FileSystemView)- использует данный текущий каталог иFileSystemView
Все разные способы вызова конструктора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. В приведенных ниже примерах мы используемFileSystemView.getFileSystemView() и указываем его на домашний каталог черезgetHomeDirectory(). Этот процесс приводит к типу файла. Другими словами, мы используем конструкторJFileChooser(File) с учетомFileSystemView.
1. показать * Dialog () -Open or save a file
Пример того, как использоватьJFileChooser для получения абсолютного пути к файлу, который пользователь хочет открыть, или для получения места, в котором пользователь хочет сохранить файл:
FileChooser1.java
package com.example.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 (число) -Select files or directories
С помощью этого метода мы можем ограничить пользователя выбором только каталогов (JFileChooser.DIRECTORIES_ONLY) или только файлов (JFileChooser.FILES_ONLY) или файлов и каталогов (JFileChooser.FILES_AND_DIRECTORIES). По умолчаниюFILES_ONLY. Вот пример, реализующийJFileChooser.DIRECTORIES_ONLY:
FileChooser2.java
package com.example.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 (логический) -Allow multiple selections
Пример, в котором включен множественный выбор. Пользователь выбирает несколько файлов, а программа печатает имена:
FileChooser3.java
package com.example.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. Фильтры -Limit the set of files shown to the user
Всегда удобно ограничить выбор пользователя потребностями программы. Например, если вашей программе требуются изображения в формате png и gif, рекомендуется ограничить выбор пользователя только этим. В приведенном ниже примере показано, как этого добиться с помощью настраиваемогоFileNameExtensionFilter:
FileChooser4.java
package com.example.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(). Вот пример того, как его использовать:
FileChooser5.java
package com.example.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());
}
}
}
Выход:

Note
ВJFileChooser есть метод под названиемsetApproveButtonText(String). Проблема с этим методом в том, что он работает только дляshowOpenDialog(). Рекомендуется использоватьshowDialog() как заменуshowSaveDialog(), когда требуется настраиваемая кнопка.
Вы также должны проверить самые простые и наиболее часто используемые методы для записи и чтения файлов: