IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

lister un répertoire avec sous-dossiers


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Points : 18
    Points
    18
    Par défaut lister un répertoire avec sous-dossiers
    bonjour
    je voudrais lister un répertoire complet mais je ne sais pas comment faire pour lister aussi le contenu des sous-dossiers
    pour l'instant, dès qu'il rencontre un sous-dossier il me met une erreur

    mon arborescence :
    -ExemplesFiles
    -----TestFiles
    ----------test1.html
    ----------test2.pdf
    ----------test3.doc
    -----TestIndexing
    ----------test4.xml
    ----------test5.zip

    mon système fonctionne si je liste le répertoire TestFiles ou TestIndexing
    mais ce que je voudrais c'est lister le répertoire ExemplesFiles.

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    static String [] listefichiers;
    static File repertoire = new File ("E:\\workspace\\test_lius\\ExempleFiles\\testFiles");
    listefichiers=repertoire.list();
    ce code ne fonctionne pas si je met la ligne : static File repertoire = new File ("E:\\workspace\\test_lius\\ExempleFiles");

    pouvez-vous m'aider svp

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Pour ton arborescence, je te suggère d'utiliser "listFiles()" au lieu de "list()"

    Sur chaque "File" de ton tableau, tu auras ainsi la méthode isDirectory() qui te dira s'il s'agit d'un répertoire (et te permettra ainsi d'y appliquer une méthode récursive de recherche).

    Mais tu devras gérer cette récursivité (et le traitement de chaque niveau) toi-même: le langage ne le fera pas à ta place.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    merci pour ta réponse,
    j'ai trouvé ce code (que j'ai modifié), il fonctionne, j'arrive à faire le traitement que je veux sur chaque fichier trouvé (en fait je fais un système d'indexation et de recherche, je cherche donc à indexer chaque fichier de mon répertoire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    public static 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 ) {
    			try {
    				String toIndex = theDirectory + File.separator + fileList[i];
    				File file_to_index=new File(toIndex);
    				LiusLogger.setLoggerConfigFile(log4j);
    				LiusConfig lc = LiusConfigBuilder.getSingletonInstance().getLiusConfig(liusConfig);
    				Indexer indexer = IndexerFactory.getIndexer(file_to_index, lc);
    				indexer.index(indexDir);
    				System.out.println("Indexation reussie");
    				System.out.println("===========*****=============");
    				}
    			catch (Exception e) 
    			{
    				e.printStackTrace();
    			}
     
    			// --- Add the path of the current file 
    			//finalListFiles.add(theDirectory + File.separator + fileList[i]); 
    		}
    		//else System.out.println("dans else");
    		// --- Add the array list of the current directory 
    	} 
    	return finalListFiles; 
    	}
    cette fonction scanDir est appelé dans ma méthode main par scanDir(dir), dir est déclaré par :
    final static String dir = "E:\\workspace\\test_lius\\ExempleFiles";

    ce code fonctionne mais l'arraylist ne me sert pas et je voudrais la retirer. le problème est que dès que j'essaie de l'enlever ça me génère quelques erreurs, en corrigeant celles-ci, ça m'en regénère d'autres...
    pouvez-vous m'aider à corriger cela
    merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    je suis d'accord pour la récursivité (vu qu'il s'agit d'un traitement sur une liste) mais je ne comprends pas:

    Mais tu devras gérer cette récursivité (et le traitement de chaque niveau) toi-même: le langage ne le fera pas à ta place.
    Qu'est ce que tu entends par là ?
    Afficher le fichier si ce n'est pas un répertoire et le retraiter sinon ?

    Bonne soirée !

  5. #5
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par zenii Voir le message
    Bonjour,

    je suis d'accord pour la récursivité (vu qu'il s'agit d'un traitement sur une liste) mais je ne comprends pas:

    Mais tu devras gérer cette récursivité (et le traitement de chaque niveau) toi-même: le langage ne le fera pas à ta place.
    Qu'est ce que tu entends par là ?
    Disons que il n'existe pas de fonction qui prenne en entree un repertoire et te liste sans effort tous les fichiers et les tous les sous respertoires ....
    Les fonctions disponibles s'arreterons au repertoire transmis et faudra relancer l'operation pour tous les repertoires que tu trouvera dans ce dernier .. et ainsi de suite .... jusqu'a epuisement des repertoires
    C'est le principe de la recursivité

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    bonjour
    j'ai un problème avec le listage de mon répertoire, ma variable i de ma boucle for reste à 0, pourtant quand j'affiche fileList.length, la valeur correspond bien au nombre de fichiers (ou dossiers)
    d'autre part, lorsqu'il trouve un fichier, cela ne passe pas dans le if (erreur générée, provient peut-être du probleme de la variable i)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static void main(String[] args) {
    		String dir = "E:\workspace\\test_lius\\ExempleFiles";
    		 listage(dir);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public static void listage ( String theDirectory ) //throws IOException 
    	{
    		File currDir = new File ( theDirectory ); 
    		String[] fileList = currDir.list(); 
    		for (int i=0; i <fileList.length ; i++ ) 
    		{ 
    			if ( currDir.exists() && !currDir.isDirectory() ) 
    			{ 
    				try 
    				{
    						//mon traitement					}
    				catch (Exception e) 
    				{
    					e.printStackTrace();
    				}
    			}
    			else 
    			{
    				String dir = theDirectory  + "\\"+ fileList[i];
    				System.out.println(dir);
    				listage(dir);
    			}
    		}
    	}
    c'est la première fois que je fait du récursif, pouvez vous m'aider a corriger ce code
    cordialement

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    pour le récursif, l'idée c'est que si tu tombes sur un cas que tu sais traiter (affichage d'un fichier) tu le traites autrement (cas d'un répertoire), tu rappelles la même fonction ... soit grosso modo ce que tu as fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    public void listage (String myDir) {
     
    int size = myDir.getSize();
     
    // Je parcours mon répertoire
    for (i=0;i<size;i++) {
     
    // On regarde les éléments un par un
    current = myDir.getElement(i);
     
    if (current.isDirectory()) { // si c'est un répertoire
    listage(current.getName()); //on lui applique la fonction
    }
    else { // si c'est un fichier
    afficheMonFichier(); // tu l'affiches
    }}}
    Ensuite, pour ton problème de fileList.length au pire tu la stockes dans une variable locale mais ça me paraît bizarre.
    Ton test sur l'existence du fichier pourrait être placé plus haut (en dehors de la boucle) parce que là si il n'existe pas, tu risques de boucler.
    Lorsque tu trouves un fichier, cela peut venir des tests puisque tu arrivais à les traiter auparavant. Si tu n'arrives pas à rentrer dans la boucle if, fais un test sur un répertoire ne contenant que des fichiers (ainsi il devra nécessairement traiter des fichiers) et regarde ce qu'il fait !
    Enfin, essaye de mettre des traces plus précises !


    ps :
    Disons que il n'existe pas de fonction qui prenne en entree un repertoire et te liste sans effort tous les fichiers et les tous les sous respertoires ....
    Les fonctions disponibles s'arreterons au repertoire transmis et faudra relancer l'operation pour tous les repertoires que tu trouvera dans ce dernier .. et ainsi de suite .... jusqu'a epuisement des repertoires
    C'est le principe de la recursivité
    On est d'accord ... ça me paraissait un peu redondant et donc obscur

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    bonjour,
    c'est bon ça marche
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lister les répertoires et sous-répertoires
    Par Skyounet dans le forum Télécharger
    Réponses: 8
    Dernier message: 03/08/2016, 12h41
  2. Include avec sous dossiers
    Par anto2b dans le forum Langage
    Réponses: 4
    Dernier message: 24/04/2013, 20h43
  3. Lister un répertoire distant sous Windows 7
    Par dvillet dans le forum C++
    Réponses: 0
    Dernier message: 13/06/2012, 09h09
  4. [PHP 5.2] Lister un répertoire avec DirectoryIterator
    Par gtraxx dans le forum Langage
    Réponses: 1
    Dernier message: 14/03/2009, 21h01
  5. lister les répertoires et sous répertoire
    Par panthere noire dans le forum Linux
    Réponses: 7
    Dernier message: 27/12/2006, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo