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!
java string sringbuilder file comparator
Commentami!