recorrer directorios recursivamente...
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>0){
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.
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>0){
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.
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
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