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