recorrer directorios recursivamente...

terra
12 de Marzo del 2005
No soy capaz de hacer que me recorra los ficheros dentro de subdirectorios. Tengo el siguiente código:

import java.io.*;
public class dirlistado {
public static void main(String args[]) {
int Totalficheros=0;
int Totaldirectorios=0;
int Totalkbytes=0;
String dirname;

if(args.length&gt0){
dirname=args[0];
} else {
dirname = ".";
}
File f1 = new File(dirname);
System.out.println("Directorio de " + dirname);
File s[] = f1.listFiles();

for (int y = 0; y < s.length; y++) {
if (s[y].isDirectory()){

Totaldirectorios++;
System.out.println(s[y] + " es un directorio");
System.out.println(s[y].isDirectory());
}
else{
if (s[y].isFile()){
Totalficheros++;
Totalkbytes+=s[y].length();
System.out.println(s[y] + " es un fichero");
}
}
}
System.out.println("hay "+ Totalficheros +" ficheros");
System.out.println("ocupan "+ Totalkbytes +" kbytes");
System.out.println("hay "+ Totaldirectorios +" subdirectorios");
}
}
Hace que pasándole un directorio por parámetro me cuente y liste el nombre de los ficheros y su tamaño, el problema es que no funciona cuando dentro del directorio hay un subdirectorio y éste subdirectorio contiene ficheros....¿cómo puedo hacer para que me cuente tanto los ficheros que están dentro de un subdirectorio como los que están fuera?, es decir, que me recorrar recursivamente los directorios?
Gracias.



David
12 de Marzo del 2005
Hola

Pues si tienes que recorrer directorios recursivamente, necesitarás un método recursivo:

import java.io.*;

public class DirListado {
public static void main(String args[]) {
String dirname;

if (args.length > 0)
dirname = args[0];
else
dirname = ".";

File f1 = new File(dirname);
listarDirectorio(f1, "");
}

public static void listarDirectorio(File f, String c) {
String dirname;

int Totalficheros = 0;
int Totaldirectorios = 0;
int Totalkbytes = 0;

if (f.isDirectory()) {
System.out.println(c + "Directorio de " + f);
File s[] = f.listFiles();

for (int i = 0; i < s.length; i++) {
if (s[i].isDirectory()) {
Totaldirectorios++;
System.out.println(c + s[i] + " es un directorio");
listarDirectorio(s[i], c + " ");
}
else if (s[i].isFile()){
Totalficheros++;
Totalkbytes += s[i].length();
System.out.println(c + s[i] + " es un fichero");
}
}
System.out.println(c + "hay "+ Totalficheros +" ficheros");
System.out.println(c + "ocupan "+ Totalkbytes +" kbytes");
System.out.println(c + "hay "+ Totaldirectorios +" subdirectorios");
}
}

}


Salud

David

terra
12 de Marzo del 2005
Gracias David, eso es lo que andaba buscando....