Используем JFileChooser для выбора файла

Использование JFileChooser При работе с файлами из приложения возникает необходимость рано или поздно использовать диалог для выбора файлов. JFileChooser из библиотеки Java Swing как раз является таким диалогом. Кроме того диалог JFileChooser позволяет производить навигацию по файловой системе. JFileChooser только предоставляет возможность выбора файла или директории, больше ничего с ними не делает. всё остальное — задача разработчика. Работать с ним просто и легко. Давайте разберем небольшой пример и посмотрим, что необходимо сделать, чтобы показать JFileChooser и получить информацию о том, какой выбор сделал пользователь. А кроме этого посмотрим, как настроить JFileChooser должным образом. Далее мы будем смотреть, как использовать JFileChooser в самом простейшем случае.

Для того, чтобы показать диалог достаточно написать две строчки:

JFileChooser fileopen = new JFileChooser();				
int ret = fileopen.showDialog(null, "Открыть файл");

С помощью первой строчки мы создаем новый объект JFileChooser, а при помощи второй строчки мы отображаем диалог пользователю. Как только пользователь закрывает диалог, то в переменную ret заносится определенное значение. С помощью этого значения мы можем понять, что собственно произошло с JFileChooser: пользователь нажал отмену, или просто закрыл диалог или же возжелал открыть выбранный файл.

Во фрагменте, представленном ниже мы предполагаем, что пользователь в диалоге JFileChooser выбрал файл и открыл его. При помощи метода getSelectedFile мы получаем ссылку на объект File и затем продолжаем с ним работать.

JFileChooser fileopen = new JFileChooser();
int ret = fileopen.showDialog(null, "Открыть файл");				
if (ret == JFileChooser.APPROVE_OPTION) {
	File file = fileopen.getSelectedFile();
	/*
	 * Какие-то действия.
	 */
}

Вот собственно и всё. Мы научились самой простой работе с компонентом JFileChooser. Первое, что мы сделали это научились открывать диалог и показывать его пользователю. Второе — мы сумели должным образом отреагировать на действия пользователя. И третье — получили интересующую нас информацию о выбранном пользователем файле.

А теперь по традиции тестовый пример, который нам наглядно продемонстрирует изученное.

Вот так выглядело приложение у меня.

Используем JFileChooser для выбора файла

А вот такой диалог для выбора показывало мне приложение.

Используем JFileChooser для выбора файла

Думаю заметили папки с сейвами к игрухам. Да.. люблю поиграться иногда 🙂 Не всё же время программированием заниматься 😉

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TestFrame extends JFrame {

	public TestFrame() {
		super("Тестовое окно");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		
		panel.add(Box.createVerticalGlue());

		final JLabel label = new JLabel("Выбранный файл");
		label.setAlignmentX(CENTER_ALIGNMENT);
		panel.add(label);

		panel.add(Box.createRigidArea(new Dimension(10, 10)));

		JButton button = new JButton("Показать JFileChooser");
		button.setAlignmentX(CENTER_ALIGNMENT);

		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFileChooser fileopen = new JFileChooser();				
				int ret = fileopen.showDialog(null, "Открыть файл");				
				if (ret == JFileChooser.APPROVE_OPTION) {
					File file = fileopen.getSelectedFile();
					label.setText(file.getName());
				}
			}
		});

		panel.add(button);
		panel.add(Box.createVerticalGlue());
		getContentPane().add(panel);

		setPreferredSize(new Dimension(260, 220));
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}

	public static void main(String[] args) {
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame.setDefaultLookAndFeelDecorated(true);
				JDialog.setDefaultLookAndFeelDecorated(true);
				new TestFrame();
			}
		});
	}
}

25 Responses to Используем JFileChooser для выбора файла

  1. Gorets says:

    у вас тут чтото поменялось?)
    меня еще одна тема интересует, как можно менять темы окна, .т.е знаю: стандартная, можно поставить джавовскую, а как можно ставить другие? ну, например, маковские.. =)

    • bondforever says:

      Изменилось — тему блога другую поставил, в ней картинок по минимуму да и не отвлекает ничего от прочтения. А по поводу темы окна. В Java Swing есть понятие такое Look and Feel. За тему компонент он отвечает. Это грубо говоря некий интерфейс, а каждая конкретная реализация это конкретная тема. Я так думаю, что маковская на маке только доступна, конечно если нет какой-то отдельной реализации. Как например вот тут https://substance.dev.java.net/see.html. Здесь представлена имплементация Look and Feel кастомная, которая подключается к приложению в виде джарки.

  2. Андрей says:

    Было бы неплохо, добавить пример, где используется модель Look and Feel с русскими кнопками.

    • bondforever says:

      Давно хотел сделать пример с локализованными надписями.

      • Артур says:

        Есть русская локализация библиотеки swing. По мне намного удобнее добавить её. чем использовать UIManager. http://www.megaupload.com/?d=6COMJHAS

      • bondforever says:

        Отличная вещь, сам буду использовать. А UIManager — это если хочется из кода поменять, но это есть плохо, потому что конкретные значения в код зашиваются. Сейчас посмотрел библиотеку swing_ru.jar, которая по ссылке. Здесь содержатся properties файлы, в которых заменяются локализованные строки для компонентов Swing. Я так думаю можно даже свой properties файл сделать и переопределить в нем только те свойства, которые нужны. Но проще всего конечно использовать библиотеку уже готовую.

  3. Cyberone says:

    Пример познавательный, но хотелось знать как открыть, запустить выбранный файл из FileChooser
    Спасибо.

  4. А не подскажете, существует ли похожая реализация для выбора директории?

  5. Nota says:

    А как открить файл, избранный из JFileChooser?

    • leodestroy says:

      строка File file = fileopen.getSelectedFile();
      записывает файл в поле file
      а дальше работаете с файлом как Вам угодно. Или конкретизируйте вопрос

  6. vortal says:

    Возможно ли реализовать схему. В JMenuItem мы импортируем фаил через JFileChooser

    JFileChooser fileopen=new JFileChooser();
    FileFilter filter=new FileNameExtensionFilter(«xls», «c»);
    fileopen.addChoosableFileFilter(filter);
    int ret=fileopen.showDialog(panel, «Open file»);
    if(ret==JFileChooser.APPROVE_OPTION){
    file= fileopen.getSelectedFile();
    statusbar.setText(file.getName());
    open=file.getAbsoluteFile().toString();
    openf=new File(open);
    , далее в есть кнопка на туллбаре к ней прикручиваем addActionListener в котором пишем
    Desktop.getDesktop().open( im.openf)//тут обьект класса и фаил в который записываем)

    но блин не работает почему то

  7. Irina says:

    как вывести файл с содержимым в новом окне, при выборе его в JFileChooser??

  8. Denis says:

    Если я делаю приложения через конструктор, как сделать чтобы по нажатию кнопки показывало JFileChooser?

  9. Игорь says:

    Подскажите как сделать, если JFIleChooser используешь для сохранения, что бы при выборе типа файла показывало только те типы которые тебе нужны а не AllFile. Ковырял Filter, но что-то не нашел

  10. Alik says:

    Роднуля, как присвоить предпочтительное имя(название папки с которй появиться диалог) JFileChooser

  11. Alik says:

    Ещё вопрос, обратил внимание что весь код обрабатывается после нажатие на Chanel,с вем это связано и как переопределить на OK?

  12. Сергей says:

    Здравствуйте, мне нужна функция как file.getName(), но что бы выводила полное имя файла (т.е. включая путь к нему).Как это сделать?

  13. Здравствуйте, предлагаем Вам услуги комплексного продвижения вашего сайта, подробнее с нашими услугами Вы можете ознакомиться по ссылке http://www.anacron.ru/ Извините за беспокойство.

  14. LovetSnoff says:

    Спасибо за урок! А то в туториале затерялся, а тут хорошее начало.

  15. Гость says:

    Спасибо за урок, просто и доходчиво, — «без излишеств нехороших» 🙂

Ответить на Никита Журавлёв Отменить ответ