¿Cómo puedo imprimir de forma recursiva una matriz de archivos?

Me gustaría saber cómo imprimir de forma recursiva un archivo []. He creado un programa, pero parece que el programa se está saliendo de los límites y no sé cómo solucionarlo. ¿Alguien puede darme algunos consejos o sugerencias sobre cómo resolver este problema? Gracias.

import java.io.*;

public class RecursiveDir {

static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


public static void main(String[]args) throws IOException {
    System.out.print("Please enter a directory name: ");
    File f = new File(br.readLine());

    FileFilter filter = new FileFilter() {

        public boolean accept(File f) {
            if(f.isDirectory()) {
                return true;
            }
            return false;
        }

    };

    File[] list = f.listFiles(filter);
    System.out.println(returnDir(list,list.length));
}

public static File returnDir(File[] file,int counter) {
    File f = file[counter];
    if(counter == 0) {
        return file[0];
    }else {
        return f = returnDir(file,counter--);
    }
}
}

EDITAR: Seguí los comentarios a continuación y cambié return f = returnDir(file,counter--); a return f = returnDir(file,--counter); y también cambió returnDir(list,list.length); a returnDir(list,list.length-1);, mi código funciona bien pero ahora no se imprime nada.

preguntado el 16 de mayo de 11 a las 19:05

¿Qué esperabas que se imprimiera? No veo ninguna declaración de salida en su código. -

Además, para mayor claridad, es mejor hacer esto: counter--; return returnDir(file, counter); -

Necesito imprimir de forma recursiva las rutas absolutas del archivo. -

¿Se supone que también debes ir por cada subdirectorio? -

No. entonces, por ejemplo, si escribo C: / entonces debería imprimir todos los directorios en C: / -

5 Respuestas

Vas a salir del límite de la matriz porque necesitas pasar list.length - 1 al método.

Sin embargo, incluso si hicieras eso, tendrías una recursividad infinita, porque counter-- usará el valor del contador y luego lo disminuirá. Entonces eso significa que estás llamando returnDir con el valor actual de counter. Utilizar cualquiera --countero counter - 1.

contestado el 16 de mayo de 11 a las 23:05

Por eso siempre evito los operadores de prefijo y sufijo en las expresiones. Puede enturbiar el código, como descubrió el cartel. - Paul

¿Qué esperas que pase aquí? No parece estar haciendo nada con los archivos mientras los visita. No es necesario que la recursividad recorra los archivos del directorio, la recursividad es necesaria cuando se accede a un archivo de la lista que is un directorio.

contestado el 16 de mayo de 11 a las 23:05

De hecho, estás saliendo de los límites. Necesitas cambiar

returnDir(list,list.length);

a

returnDir(list,list.length - 1 );

contestado el 16 de mayo de 11 a las 23:05

Parece que le faltan las llamadas System.out.println (). Está recorriendo los archivos y no está haciendo nada con ellos.

contestado el 16 de mayo de 11 a las 23:05

Su llamada inicial a returnDir debe ser

returnDir(list,list.length-1);

Paul

contestado el 16 de mayo de 11 a las 23:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.