JFileChooser Java Swing

El cuadro de dialogo JFileChooser de la API Java Swing nos permite ubicar y seleccionar de manera fácil y rápida un archivo o carpeta que se encuentre dentro del sistema de archivos de nuestro PC, para utilizar esta clase debemos importar: javax.swing.JFileChooser.

JFileChooser Java Swing

Buscar un archivo con JFileChooser

Para nuestro ejemplo crearemos una pequeña aplicación que constará de un JTextField y un JButton, en el primero se mostrará la ruta del archivo que haya sido seleccionado con este cuadro de dialogo, el segundo será usado para abrir el cuadro de búsqueda.

Código de ejemplo:

public class JFileChooserTest extends JFrame implements ActionListener {

    private JTextField txt;
    private JButton btn;

    public JFileChooserTest() {
        super("JFileChooser Test");
        setLayout(new FlowLayout());

        txt = new JTextField(30);
        add(txt);

        btn = new JButton("Buscar...");
        btn.addActionListener(this);
        add(btn);
    }

    @Override
    public void actionPerformed(ActionEvent e) { ... }

    public static void main(String[] args) {
        JFileChooserTest test = new JFileChooserTest();
        test.setDefaultCloseOperation(EXIT_ON_CLOSE);
        test.setSize(400, 110);
        test.setVisible(true);
    }
}

Este es el código encargado de crear la GUI, establecer la acción del botón y mostrar la ventana al iniciar la aplicación, el resultado se muestra en la siguiente imagen: 

Tutorial Java JFileChooser

Lo que nos interesa, es saber, como mostrar el JFileChooser al hacer clic en el botón y además obtener el archivo que ha sido seleccionado mediante el mismo, para hacerlo se requiere el siguiente código Java:

@Override
public void actionPerformed(ActionEvent e) {
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    
    FileNameExtensionFilter imgFilter = new FileNameExtensionFilter("JPG & GIF Images", "jpg", "gif"); 
    fileChooser.setFileFilter(imgFilter);

    int result = fileChooser.showOpenDialog(this);

    if (result != JFileChooser.CANCEL_OPTION) {

        File fileName = fileChooser.getSelectedFile();

        if ((fileName == null) || (fileName.getName().equals(""))) {
            txt.setText("...");
        } else {
            txt.setText(fileName.getAbsolutePath());
        }
    }
}

Explicación del código:

JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

Crea una instancia del cuadro de dialogo y establece el modo de selección a archivos y directorios, es decir, podremos usarlo para localizar un archivo o una carpeta, también podemos indicar FILES_ONLY o DIRECTORIES_ONLY para seleccionar solamente archivos o carpetas respectivamente.

FileNameExtensionFilter imgFilter = new FileNameExtensionFilter("JPG & GIF Images", "jpg", "gif");
fileChooser.setFileFilter(imgFilter);

Establece un filtro para facilitar las búsquedas, con esto el usuario solo verá aquellos archivos que tengan las extensiones indicadas, en este caso se mostrarán las imágenes .jpg y .gif, el primer parámetro indica el titulo del filtro.

jfilechooser java swing

int result = fileChooser.showOpenDialog(this);
if (result != JFileChooser.CANCEL_OPTION) { ... }

El método showOpenDialog() muestra el cuadro, al presionar el botón de aceptar o cancelar la ventana se cierra, podemos saber que ha presionado el usuario a través de la variable devuelta, CANCEL_OPTION indica que se presionó el botón de cancelar, APPROVE_OPTION se seleccionó la opción aceptar y ERROR_OPTION indica que se produjo un error. 

File fileName = fileChooser.getSelectedFile();

if ((fileName == null) || (fileName.getName().equals(""))) {
    txt.setText("...");
} else {
    txt.setText(fileName.getAbsolutePath());
}

El método getSelectedFile() devuelve el objeto File correspondiente al archivo o carpeta seleccionado, para nuestro ejemplo, comprobamos que es una archivo e indicamos la ruta del mismo en el JTextField, si por ejemplo, deseas leer el archivo, este es el lugar para hacerlo.

Guardar un archivo con JFileChooser

Este cuadro también puede ser utilizado para guardar un archivo, funciona de manera similar, solo que esta vez nos permitirá indicar el nombre y ruta en donde deseamos guardar un archivo, podemos seleccionar un archivo existente y este se sobre escribirá, el código se mantiene prácticamente igual solo cambiamos:

int result = fileChooser.showSaveDialog(this);

Es todo por ahora, puedes descargar el código de ejemplo: jfilechooser-java-swing.zip

Comentarios

Entradas populares de este blog

Conectar SQL Server con Java

Entrenar OpenCV en Detección de Objetos

Acceso a la webcam con OpenCV

JavaFx 8 Administrar ventanas

Analizador Léxico