Рубрики
Без рубрики

Java Swing – пример JFileChooser

– Javax Swing – пример JFileChooser

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());
		}

	}

}

Выход:

Вы также должны проверить самые простые и наиболее часто используемые методы записи и чтения файлов:

Рекомендации

  1. JFileChooser – API Java 8
  2. Представление файловой системы – API Java 8
  3. Расширение имени файла – API Java 8

Оригинал: “https://mkyong.com/swing/java-swing-jfilechooser-example/”