Originariamente inviato da dom.vecchioni
ma non riesco a capire dove sbaglio,non è che di ricorsione sono molto pratico,mi potete spiegare dove sbaglio?
Non è tanto un problema di "ricorsione" ... la questione è nel come vuoi memorizzare e restituire tutte le entry trovate.
Tu forse vorresti avere alla fine di tutta la scansione un array che contiene tutti i file trovati. Ma l'approccio che usi non è corretto. Quando fai:
str=f.list();
o
str=RicercaAlbero.list(f,str);
stai semplicemente assegnando l'array a quella variabile ... non aggiungi un bel nulla.
E oltretutto ci sono vari errori. La condizione nel for è i<f.length() ma quel 'f' deve rappresentare una directory e length() non va bene per le directory. list() ritorna solo i nomi delle entry ma per poter usare i nomi dovresti concatenarli con la directory parente (quella che stai scansionando). Inoltre testi isDirectory() sulla directory di scansione, non sulle entry.
Insomma ... è tutto sbagliato.
Ti posto un esempio che stampa solamente i file:
codice:
import java.io.*;
public class Prova
{
public static void elencaFile (File dir)
{
File[] entries = dir.listFiles ();
if (entries != null)
{
for (int i = 0; i < entries.length; i++)
{
if (entries[i].isDirectory ())
elencaFile (entries[i]); // ricorsione
else
System.out.println (entries[i]); // stampa file
}
}
}
public static void main (String[] args)
{
File d = new File ("C:\\Programmi");
elencaFile (d);
}
}
Se invece di stampare i file vuoi avere una lista dei file, allora potresti passare al metodo un ArrayList. Nel metodo ogni file lo aggiungi all'ArrayList che quindi man mano si riempie.