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


Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

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

*

*