[JAVA] lister les fichiers d'une arborescence

Fermé
Jerhom - 16 juil. 2007 à 17:33
 piopier - 4 juin 2009 à 12:32
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
A voir également:

3 réponses

Utilisateur anonyme
17 juil. 2007 à 11:32
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
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
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