Browse directory recursively

1

I'm doing a program creating, modifying and scrolling directorios and archivos , I'm stuck in the part of showing on the screen the content of a directorio and in the case of having sub-directorios show what these they have.

Code that I use to show what is inside a directorio .

public static void caso6() {
    System.out.println("Indica la ruta del direcotrio: ");
    String ruta = keyboard.nextLine();
    File rutaArchivo = new File(ruta);

    if (rutaArchivo.exists()) {
        String[] archivos = rutaArchivo.list();

        if (archivos == null) {
            System.out.println("No hay ficheros en el directorio especificado");
        } else {
            for (int x = 0; x < archivos.length; x++) {
                System.out.println(archivos[x]);

            }
        }
    } else {
        System.out.println("El directori o la ruta no existen.");
    }
}
    
asked by Pau Bacardit Agset 14.06.2018 в 00:51
source

3 answers

1

You solve them with a recursive method. (Example in c #)

    public static void PrintFilesInDir(string path)
    {
        if (Directory.Exists(path))
        {
            foreach (var item in Directory.GetFiles(path))
            {
                System.Console.WriteLine(item);
            }
            foreach (var item in Directory.GetDirectories(path))
            {
                System.Console.WriteLine(item);
                PrintFilesInDir(item);
            }
        }
    }
    
answered by 14.06.2018 / 01:56
source
1

A fairly complete example you have when counting the directories from the current position where your program is executed, the key is in the Walkin () function that is recursive with the aim of traversing the entire directory tree:

public class CountDirectories {
    private static int numDir;

    public static void main(String[] args) {
        try {

            numDir = 0;
            walkin(new File(".\")); // Directorio raíz, modificar para pruebas..
            System.out.println("\nSe han encontrado: " + numDir + " directorios");
            File salida = new File(".\salida.txt");
            BufferedWriter bw = new BufferedWriter(new FileWriter(salida));
            bw.write("Se han encontrado: " + numDir + " directorios \n");
            bw.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void walkin(File dir) {

        File listFile[] = dir.listFiles();
        if (listFile != null && listFile.length > 0) {
            for (int i = 0; i < listFile.length; i++) {
                if (listFile[i].isDirectory())
                    walkin(listFile[i]);
            }
        } else {
            numDir++;
            System.out.print(numDir + ", "); // Por Debug, pare ver los directorios que va encontrando.
        }
    }
}
    
answered by 18.06.2018 в 16:40
0
public static void cas7() {
    System.out.println("Indica la ruta del direcotri: ");
    String ruta = keyboard.nextLine();

    listFiles(ruta);
}

public static void listFiles(String ruta) {
    File rutaArx = new File(ruta);

    if (rutaArx.exists()) {
        File[] arxius = rutaArx.listFiles();

        if (arxius == null) {
            System.out.println("No hi ha fitxers en el directori que has indicat");
        } else {
            for (int x = 0; x < arxius.length; x++) {
                if (arxius[x].isFile()) {
                    System.out.println(arxius[x]);
                } else if (arxius[x].isDirectory()) {
                    listFiles(arxius[x].getAbsolutePath());
                }
            }
        }
    } else {
        System.out.println("El directori o la ruta no existeixen.");
    }
}

thank you very much! this is the code that I used at the end in case it helps someone

    
answered by 14.06.2018 в 23:14