Home / Programmazione / Java / Listare file e directory in Java
Mattepuffo

Listare file e directory in Java

Listare file e directory in Java

Vi posto una semplice classe che permette di listare file e directory in maniera ricorsiva di una cartella che decidete voi.

Nello specifico il programma è per console, ma è facilmente espandibile per un'applicazione grafica.

In avvio di programma vi viene chiesto quale directory volete listare.

Dopo di che partono i vari metodi:

  • sortList
  • listingDir

Vediamo il tutto:

import java.io.*;
import java.util.Arrays;

public class ListDirConsole {

    public static void main(String args[]) throws FileNotFoundException, IOException {
        System.out.println("Immetti il percorso");
        System.out.println();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String path = br.readLine();
        File dir = new File(path);
        StringBuilder lista = sortList(dir);
        System.out.println();
        System.out.println(lista);
    }

    private static void listingDir(File dir, int livello, StringBuilder sb) {
        String spazio = "";
        for (int l = 0; l < livello; l++) {
            spazio += " |_";
        }
        File[] elementi = dir.listFiles();
        Arrays.sort(elementi, new MyComparator());
        for (File files : elementi) {
            sb.append(spazio).append(files.getName()).append("n");
            if (files.isDirectory()) {
                listingDir(files, livello + 1, sb);
            }
        }
    }

    public static StringBuilder sortList(File dir) throws FileNotFoundException {
        StringBuilder sb = new StringBuilder();
        listingDir(dir, 0, sb);
        return sb;
    }
}

Nel metodo main usiamo questa riga

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

per far scrivere il path all'utente (attraverso System.in).

Poi viene lanciato sortList che ritorna uno StringBuilder:

StringBuilder lista = sortList(dir);

passandogli dir come argomento.

Il metodo listingDir accetta tra parametri: un File per la directory da listare, un int per controllare i vari livelli delle sottodirectory e uno StringBuilder per costruire l'output.

Ho usato uno SringBuilder in quanto al contrario di String è possibile costruirlo dinamicamente; non è statico insomma.

La stringa spazio server per distinguire tra i file e le directory in modo da capire quale è una dir e quali file dentro le dir.

L'array di File è costruito attraverso il metodo listFiles che ritorna un arry di path dei file e directory peresenti.

Attraverso questa riga ordiniamo l'array usando myComparator, del quale ho parlato in questo articolo:

Arrays.sort(elementi, new myComparator());

In pratica a sb aggiungiamo la stringa spazio più il nome del file e un n per andare a capo.

Nell'if controlliamo se è un file o una directory, e in questo secondo caso rilanciamo il metodo aumentando il livello di uno (ricorsione).

Il risultato è più facile guardarlo che spiegarlo.

Ringrazio andbin del forum HTML.it per l'aiuto!