recursividad

morway
16 de Noviembre del 2003
hola gente... Estoy haciendo un programa que muestre los archivos contenidos dentro de un directorio pasado por parámetro, y que entre dentro de los directorios y muestre los archivos que este tieene, y así sucesivamente mientras hayan directorios dentro de otros.
Mi problema principal reside en que me da un fallo al compilar en la línea a la que llamo a la misma función. Alguien puede decirme que es lo que falla?

pego el fichero para que sean conscientes de mi pregunta:
import java.io.*;

public class ListDirs {
public void main(String[] args){

if (args.length > 0){
File dir= new File(args[0]);
if (dir.isDirectory()){
String[] s = dir.list();
File[] files = new File[s.length];
for (int i=0;i<files.length;i++){
files[i] = new File(dir.getPath(),s[i]);
if (files[i].isDirectory())
ListDirs(files[i].getPath()); ///falt solucinar la llamada recursiva
else
System.out.println(files[i].getCanonicalPath());
}
}
else
System.out.println("No es un directorio");
}
else
System.out.println("Introduzca un directorio como parámetro");
}
}

ecdl
16 de Noviembre del 2003
a quien habia que pegar es a ti...
ListDirs no es una función, es una clase
prueba a cambiar ListDirs (...) por main (...) pero es la peor clase que he visto nunca, un main recursivo!!

morway
16 de Noviembre del 2003
perdón, lo de ListDirs fue un intento a la desesperada, yo llamaba a main, y es así como me daba error. Y en cuanto a la calidad, todo evolucinona, o es que tu empezaste con la POO sabiendo ya?

ecdl
16 de Noviembre del 2003
por supuesto

morway
16 de Noviembre del 2003
vaya... parece mentira que un genio malgaste su tiempo fanfarroneando y tirando por los suelos al resto. Pero bueno.... que sepas que tu solución no ha sido válida, con tanto que sabes.
Bye, Bye.

morway
16 de Noviembre del 2003
En fín.... .... ya esta solucionado aunque con una pequeña variación.

import java.io.*;

public class ListDirs {
public static void mostrar_dir(File dir){
String[] s = dir.list();
File[] files = new File[s.length];
for (int i=0;i<files.length;i++){
files[i] = new File(dir.getPath(),s[i]);
if (files[i].isDirectory())
mostrar_dir(files[i]);
else
System.out.println(files[i].getPath());
}
}

public static void main(String[] args){

if (args.length > 0){
File dir= new File(args[0]);
if (dir.isDirectory())
mostrar_dir(dir);
else
System.out.println("No es un directorio");
}
else
System.out.println("Introduzca un directorio como parámetro");
}
}

ecdl
16 de Noviembre del 2003
import java.io.*;

public class ListDir {
public static void main(String[] args) throws Exception
{

if (args.length > 0){
File dir= new File(args[0]);
if (dir.isDirectory()){
String[] s = dir.list();
File[] files = new File[s.length];
for (int i=0;i<files.length;i++){
files[i] = new File(dir.getPath(),s[i]);
if (files[i].isDirectory())
main(new String [] {files[i].getPath()}); ///falt solucinar la llamada recursiva
else
System.out.println(files[i].getCanonicalPath());
}
}
else
System.out.println("No es un directorio");
}
else
System.out.println("Introduzca un directorio como parámetro");
}
}

para cambiar menos cosas, sabes?