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.