Para listar y filtrar archivos con FileFilter en Java debemos importar File y FileFilter del paquete java.io. Sobrescribiendo la función accept de FileFilter podremos definir las características, prefijos, sufijos o la extensión de archivos que deseemos filtrar.
Te mostramos el código:
package com.decodigo.ejemplo; import java.io.File; import java.io.FileFilter; /** * * @author decodigo.com */ public class FiltrarArchivosConFileFilter { public static void main(String[] args) { //Creamos nuestro filtro de archivos o ficheros FileFilter archivosFilter = new FileFilter() { //Sobreescribimos el método public boolean accept(File file) { if (file.getName().endsWith(".txt")) { return true; } return false; } }; File directorio = new File("/ruta/"); //Verificamos si la carpeta existe if (!directorio.exists()) { System.out.println(String.format("La carpeta %s no existe.", directorio.getName())); return; } //Verificamos que se trate de una carpeta o directorio y no un archivo if (!directorio.isDirectory()) { System.out.println(String.format("La entrada %s no es un directorio", directorio.getName())); return; } File[] files = directorio.listFiles(archivosFilter); //Listamos en un ciclo for los resultados for (File f : files) { System.out.println(f.getName()); } } }
Como puedes ver, creamos una instancia y sobrescribimos la clase FileFilter y su método acept() y lo único que hacemos es devolver un valor verdadero si la cadena con el nombre del archivo termina con la extensión «.txt«.
FileFilter archivosFilter = new FileFilter() { //Sobreescribimos el método public boolean accept(File file) { if (file.getName().endsWith(".txt")) { return true; } return false; } };
Con las funciones de String puedes buscar una cadena específica, un prefijo o puedes agregar más condiciones para incluir otras extensiones de archivo.
Las líneas siguientes simplemente crean una instancia de la clase File con la ruta del directorio de interés. Verificamos que exista y que en efecto se trate de un directorio.
File directorio = new File("/ruta/"); //Verificamos si la carpeta existe if (!directorio.exists()) { System.out.println(String.format("La carpeta %s no existe.", directorio.getName())); return; } //Verificamos que se trate de una carpeta o directorio y no un archivo if (!directorio.isDirectory()) { System.out.println(String.format("La entrada %s no es un directorio", directorio.getName())); return; }
Posteriormente usamos la función de File llamada listFiles(), que devuelve un arreglo de File con los archivos encontrados. Esta función recibe como argumento a la variable archivosFilter que creamos al inicio.
File[] files = directorio.listFiles(archivosFilter); //Listamos en un ciclo for los resultados for (File f : files) { System.out.println(f.getName()); }
Ejecutar el código del ejemplo
En nuestro ejemplo estamos buscando archivos en un directorio donde al menos uno de ellos no cumple con nuestra condición:
Si ejecutas el ejemplo obtendrás el listado de archivos que coincidan con nuestra condición en FileFiter:
En la ventana de salida de nuestro editor se ha omitido en la lista de resultados al archivo «prueba.log». Otra cosa que debes observar, es que puede ocurrir que la lista se muestre en un orden diferente al que vemos en el explorador de archivos, el ordenamiento en la salida de datos que muestres al usuario dependerá de ti y debes tomar en cuenta las opciones que cada elemento del arreglo de File tiene disponibles como nombre, fecha o tamaño.
Esperamos que este ejemplo para Listar y Filtrar archivos con FileFilter en Java te sea de utilidad.
Ver la documentación: https://docs.oracle.com/javase/8/docs/api/java/io/FileFilter.html
Más información en inglés: https://geekole.com/list-and-filter-files-with-filefilter/