Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [java]ricerca ad albero ricorsiva

    Ciao a tutti ragazzi, sto scrivendo un metodo static che mi restituisce la lista di tutti i file contenuti in una determinata cartelle(che io gli passo)e delle rispettive sottocartelle, il metodo è quindi ricorsivo, ma non riesco a capire dove sbaglio,non è che di ricorsione sono molto pratico,mi potete spiegare dove sbaglio?mille grazie.
    vi posto il codice...

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


    public class RicercaAlbero{

    public static String[] list(File f,String[] str){

    str=f.list();
    for(int i=0;i<f.length();i++){

    if(f.isDirectory()==true){
    str=RicercaAlbero.list(f,str);
    return str;
    }
    }

    return str;
    }

    public static void main(String[] args){
    File f=new File("prova");
    String st=System.getProperty("user.dir");
    // String[] str=new String[25];
    // str=RicercaAlbero.list(f,str);




    }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java]ricerca ad albero ricorsiva

    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    mille grazie andbin,
    purtroppo come ben sai programmo da pochissimo e le classi java sono pochi giorni che le ho iniziate a vedere per la verità ho appena guardato la classe string, object e appena venerdì la classe file, quindi non sono esperto, era solo una prova che volevo fare. e pergiunta riuscita male, ti ringrazio per l'aiuto come sempre molto esaustivo e mi chiarisce sempre una marea di cose....

    mille grazie e sicuramente ti disturberò ancora, se me lo permetti....
    ancora grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.