jueves, 3 de junio de 2021

Java Filtrar ficheros por varios criterios

 1. Introducción

Queremos filtar ficheros para ello utilizamos el Functional Interfase FilenameFilter, y también la libreria apache.commons.io

2. Crear un filtro por nombre con FilenameFilter

Queremos que el nombre del fichero verifique un patrón regex. Podríamos hacer

FilenameFilter myNameFilter = (dir, name) -> name.matches(pattern);

Supongamos que queremos que el nombre verifique un patrón regex por ejemplo que empliece el nombre pro "DECRETO" y que tenga la palabra"Copia" en mitad del nombre y que sea de estensión "pdf".Sse podria hacer 

pattern= "DECRET(.*)Copia(.*)\\.pdf";

3. Crear un filtro por fecha con apache.commons.IOFileFilter

Tenemos para ficheros posteriores a una fecha "Date from"

IOFileFilter myDateFileFilter = FileFilterUtils.ageFileFilter(from, false);

Para el caso de ficheros anteriores a esa fecha, en vez de "false" hay que decir "true"


4. Crear un filtro que solo recoja archivos (no carpetas..)

Tenemos para ficheros posteriores a una fecha "Date from"

IOFileFilter myFileFilter = FileFilterUtils.fileFileFilter();

5. Combinemos los filtros

Utilizamos tambien apache.commons.FileFilterUtils.and:

FileFilter myCombinedFileFilter = FileFilterUtils.and(
myFileFilter,      // Only select files
myNameFilter,      // Filter by name
myDateFileFilter); // Filter by newer than date

Y para recoger todos los ficheros de la carpeta "downloads":

File myDir = new File("/home/ximo/downloads");

File[] dirFiles = myDir.listFiles(myCombinedFileFilter);

No hay comentarios :

Publicar un comentario