
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.
public static void listarDirectorio(File directorio, String separador){
...
}
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().
for (int x=0;xAhora 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.
if (ficheros[x].isDirectory()){
String nuevo_separador;
nuevo_separador = separador + " ";
listarDirectorio(ficheros[x],nuevo_separador);
}
En el código hemos insertado una variable separador, la cual añadirá un espacio en blanco cada vez que cambiemos de directorio.
jacinto
me podrian ayudar con este metodo?
Método genérico public static <T> void insertar(Lista<T> lista, T dato, int pos)
lista –> TADLista en donde se insertará el dato
dato –> Dato a insertar
pos –> Posición de la lista en donde se insertará el dato
Si pos es 1, el dato se insertará al principio
Si pos es mayor al número de elementos de la lista, el dato se insertará al final
De otra manera, el dato se insertará en la posición indicada por pos
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
@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
@Marco,
Me alegro mucho que te haya sido de utilidad. :-D
Marco
Muy util, saludos desde Chile!.
Víctor Cuervo
@Aldo,
Es como comenta @nnnnnn, tienes que inicializar el array listarr.
nnnnnn
String [] listarr = new String[30];
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 :(