[JAVA] lister les fichiers d'une arborescence

Jerhom -  
 piopier -
A partir d'un objet File, je souhaite récupérer dans un tableau de File (File[]) ou une ArrayList(), l'ensemble des fichiers et sous-fichiers (mon objet File étant un répertoire initialement).

J'essaye de faire ça récursivement, mais la récursivité et moi ça fait 2. J'arrive à parcourir mon arbo, mais je n'arrive pas à stocker mon résultat. Est-ce que quelqu'un peu me donner un coup de main ?

Merci d'avance
Configuration: Windows 2000
Firefox 2.0.0.4

3 réponses

  1. danimo
     
    Bonjour,

    /* Voila une methode qui te permettra de dresser la liste de fichier inclus dans un
    repertoire, et ceci en recurence :
    */
    public ArrayList scanDir ( String theDirectory ) throws IOException
    {
    File currDir = new File ( theDirectory );
    ArrayList finalListFiles = new ArrayList();
    // Return null if not a directory
    if ( currDir.exists() && ! currDir.isDirectory() )
    {
    return null;
    }

    String[] fileList = currDir.list();

    for (int i=0; i<fileList.length; i++ )
    {
    Object temp = scanDir ( theDirectory + File.separator + fileList[i] );
    if ( temp == null )
    // --- Add the path of the current file
    finalListFiles.add(theDirectory + File.separator + fileList[i]);
    else
    // --- Add the array list of the current directory
    }

    // --- Finally, return the arrayList
    return finalListFiles;
    }
    /*
    Et ceci de facon recurente, c'est a dire que ca te donnera toute l'arborescence d'un
    repertoire si tu as des sous-dossiers. Pour y faire appel :
    ArrayList arborescence = scanDir ( "Chemin complet du repertoire");
    */
    }
    7
  2. piopier
     
    Plus simple :

    	public void listerRecursif(File file, String prefix, List liste) {
    		if (file.exists()) {
    			if (file.isFile()) {
    				liste.add(prefix+file.getName());
    			}
    			else if (file.isDirectory()) {
    				File[] contenu	= file.listFiles();
    				for(int i=0; i<contenu.length; i++) {
    					listerRecursif(contenu[i], prefix+file.getName()+"/", liste);
    				}
    			}
    		}
    	}
    
    4
  3. jerhom
     
    Je crois avoir touvé la solution. Je déclare d'abord une variable dans ma classe de type ArrayList que je vais renseigner au fur et à mesure. J'obtiens une ArrayList que je n'ai plus qu'à transtyper pour avoir ma liste de File.

    private ArrayList listeFichiers = null;

    private void scruteRepertoire(File fichier, boolean reset){

    if (reset){
    listeFichiers.clear();
    }

    if (fichier.isDirectory()){
    File [] sousRepertoire = fichier.listFiles();
    for (int i=0 ; i<sousRepertoire.length ; i++){
    scruteRepertoire(sousRepertoire[i],false);
    }
    }
    listeFichiers.add(fichier);
    }

    public static void main(String[] args) {
    File repertoire = new File(ParametresApplication.getInstance().getRepertoireScrutation());
    scruteRepertoire(repertoire, true);
    File[] tableauFichier = new File[listeFichiers.size()];
    for (int i =0 ; i<listeFichiers.size() ; i++){
    tableauFichier[i] = (File)listeFichiers.get(i);
    }
    }
    3