Java Swing - пример JFileChooser

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() похожи, разница заключается в том, как разработчик обрабатывает каждый из них. Для удобства чтения я бы не советовал смешивать два метода.

Выход:

swing-jfilechooser-4a

Когда пользователь переходит в каталог, выбирает файл и нажимает «Открыть».

swing-jfilechooser-4b

Выход:

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

    }

}

Выход:

swing-jfilechooser-4c

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

    }

}

Выход:

swing-jfilechooser-4d

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

    }

}

Выход:

swing-jfilechooser-4e

Как видите, пользователю запрещено выбирать что-либо еще. Указанный выше каталог также содержит другие типы изображений, но пользователю показываются только gif и png.

Каталог выглядит так:

swing-jfilechooser-4f

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

    }

}

Выход:

swing-jfilechooser-4g

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

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