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/”