[JAVA] lister les fichiers d'une arborescence

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

  • Votes
  • Date
  • Date décroissante
  1. 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");
    */
    }
    1. 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);
      				}
      			}
      		}
      	}
      
      1. 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);
        }
        }