Saltar la navegación

2.2.- Interface FilenameFilter.

Típico colador de cocina.

Hemos visto como obtener la lista de ficheros de una carpeta o directorio. A veces, nos interesa ver no la lista completa, sino los archivos que encajan con un determinado criterio.

Por ejemplo, nos puede interesar un filtro para ver los ficheros modificados después de una fecha, o los que tienen un tamaño mayor del que el que indiquemos, etc.

El interface FilenameFilter se puede usar para crear filtros que establezcan criterios de filtrado relativos al nombre de los ficheros. Una clase que lo implemente debe definir e implementar el método:

boolean accept(File dir, String nombre)

Este método devolverá verdadero en el caso de que el fichero cuyo nombre se indica en el parámetro nombre aparezca en la lista de los ficheros del directorio indicado por el parámetro dir.

En el siguiente ejemplo vemos cómo se listan los ficheros de la carpeta c:\datos que tengan la extensión .txt. Usamos try y catch para capturar las posibles excepciones, como que no exista dicha carpeta.

import java.io.File;
import java.io.FilenameFilter; 
public class Filtrar implements FilenameFilter {
String extension;
   // Constructor
   Filtrar(String extension){
           this.extension = extension;
    }
public boolean accept(File dir, String name){
     return name.endsWith(extension);
     }
public static void main(String[] args) {
try {
     // Obtendremos el listado de los archivos de ese directorio
     File fichero=new File("c:\\datos\\.");
     String[] listadeArchivos = fichero.list();
      // Filtraremos por los de extension .txt
      listadeArchivos = fichero.list(new Filtrar(".txt"));
      // Comprobamos el número de archivos en el listado
      int numarchivos = listadeArchivos.length ;
      // Si no hay ninguno lo avisamos por consola
      if (numarchivos < 1)
          System.out.println("No hay archivos que listar");
          // Y si hay, escribimos su nombre por consola.
          else
       {
              for(int conta = 0; conta < listadeArchivos.length; conta++)
              System.out.println(listadeArchivos[conta]);
     }
}
catch (Exception ex) {
System.out.println("Error al buscar en la ruta indicada"); }
}
 En el ejemplo anterior se utiliza la función endsWith. Por si no sabes para que se emplea, y para ver otras más sobre tratamiento de cadenas, sigue este enlace: https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

 

Para saber más

En el ejemplo anterior se utiliza la función endsWith. Por si no sabes para que se emplea, y para ver otras más sobre tratamiento de cadenas, sigue este enlace: