Listar un directorio de forma recursiva en Java

27/Dic/2008 Java , , 7 Comentarios

Ayer veíamos como listar el contenido de un directorio con Java. En este ejemplo listábamos el contenido, saliendo como resultado los ficheros y directorios que contenía este.

En este caso lo que vamos a hacer es listar el contenido de los directorios de forma recursiva. Es decir, cada vez que nos encontremos un directorio dentro del directorio que estamos listando, entraremos en él y listaremos su contenido. Así de forma recursiva sobre todos los directorios.

En este caso vamos a crear un método listarDirectorio, el cual reciba un elemento File que sea un directorio y el separador.

  1. public static void listarDirectorio(File directorio, String separador){
  2. ...
  3. }

Lo primero que haremos será recuperar la lista de ficheros del directorio a listar mediante el método .listFiles(). Este método nos devuelve un array de Files.

Mediante un bucle for iremos recorriendo el array y volcando el nombre del fichero mediante el método .getName().

  1. for (int x=0;x<ficheros.length;x++){
  2. System.out.println(separador + ficheros[x].getName());
  3. }

Ahora viene la diferencia con respecto a listar el contenido de un directorio con Java. Y es que por cada elemento, además de volcar su nombre, comprobaremos si es un directorio mediante el método .isDirectory().

En el caso de que el elemento sea un directorio, volveremos a llamar al método listarDirectorio(), Pasándolo en elemento File que estamos tratando.

  1. if (ficheros[x].isDirectory()){
  2. String nuevo_separador;
  3. nuevo_separador = separador + " ";
  4. listarDirectorio(ficheros[x],nuevo_separador);
  5. }

En el código hemos insertado una variable separador, la cual añadirá un espacio en blanco cada vez que cambiemos de directorio.

Vídeos sobre Java


7 comentarios en “Listar un directorio de forma recursiva en Java”

Víctor Cuervo

Edgar

Excelente Explicación:

En el método que se pone como ejemplo le falta el parámetro seprador.

Así esta: public static void listarDirectorio(File directorio){…}

Debería ser: public static void listarDirectorio(File directorio, String separador){…}

Saludos

Víctor Cuervo

Víctor Cuervo

@Edgar, totalmente cierto. En el código de descarga estaba correcto, pero en el artículo no. Ya está corregida la errata. Muchas gracias por el aviso.

Víctor Cuervo

Víctor Cuervo

@Marco,

Me alegro mucho que te haya sido de utilidad. 😀

Víctor Cuervo

Marco

Muy util, saludos desde Chile!.

Víctor Cuervo

Víctor Cuervo

@Aldo,

Es como comenta @nnnnnn, tienes que inicializar el array listarr.

Víctor Cuervo

nnnnnn

String [] listarr = new String[30];

Víctor Cuervo

Aldo

A ver si me pueden responder esta duda, uso un código prácticamente igual a este, lo que quiero es que cada ruta encontrada se guarde en un array de String’s, hago algo mas a o menos así:

static String [] listarr;
public static void listarDirectorio(File f){
File[] ficheros = f.listFiles();

for (int x=0;x<ficheros.length;x++){
listarr[x] = ficheros[x].getName();

Pero en la última línea (listarr[x] = ficheros[x].getName();) me da un NullPointerException y no sé porque.

Ayuda por favor 🙁

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*