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

avec Java Discussion :

Lire tous les fichiers de tous les dossiers d'un répertoire


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Points : 81
    Points
    81
    Par défaut Lire tous les fichiers de tous les dossiers d'un répertoire
    bonjour,
    je viens vers vous car j'ai besoin de votre aide.
    j'ai un répertoire dans lequel j'ai plusieurs dossiers, dans chaque dossier j'ai plusieurs fichiers.
    j’aimerai lire 1 par 1 chaque fichier de chaque dossier.

    voilà mes 2 fonctions :
    Code JAVA : 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
     
    public static void listeRepertoire(File path, List<String> allFiles)
        {
     
            if (path.isDirectory())
            {
                File[] list = path.listFiles();
                if (list != null)
                {
                    for (int i = 0; i < list.length; i++)
                    {
                        // Appel récursif sur les sous-répertoires
                        listeRepertoire(list[i], allFiles);
                    }
                }
                else
                {
                    System.err.println(path + " : Erreur de lecture.");
                }
            }
            else
            {
                String currentFilePath = path.getAbsolutePath();
                //System.out.println(currentFilePath);
                allFiles.add(currentFilePath);
            }
        }

    Code JAVA : 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
     
    public void lireTout() throws IOException {
            ArrayList<String> allFiles = new ArrayList<String>();
            listeRepertoire(new File("C:\\Users\\moi\\Desktop\\bilans batch satelit 2016"), allFiles);
            File f;
            FileReader fr;
            BufferedReader br;
            for (String file : allFiles) {
                f = new File (file);
                fr = new FileReader(f);
                br = new BufferedReader(fr);
                System.out.println(f.getAbsolutePath());
                String ligne = br.readLine();
                while (ligne != null)
                {
                    System.out.println(ligne);
                }
                ligne = br.readLine();
                br.close();
                fr.close();
            }
     
        }

    le problème c'est que la fonction lireTout m'affiche la 1ère ligne du premier fichier en boucle à l'infini.
    voilà le repertoire où il y a les dossiers contenant les fichiers :
    Nom : Capture.PNG
Affichages : 2353
Taille : 27,4 Ko
    est-ce que vous pouvez m'aider svp

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le souci c'est ta boucle de lecture de fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String ligne = br.readLine();
                while (ligne != null)
                {
                    System.out.println(ligne);
                }
                ligne = br.readLine();
    Que fait le while ? Ce qu'il y a dans le bloc, donc rien d'autre que System.out.println(ligne);. ligne ne risque pas de changer en l'affichant, donc le test ligne!=null est toujours vrai si on a au moins une ligne. Conséquence ta boucle correspond à un while(true), donc est infinie. C'est la première chose à regarder pour savoir pourquoi une boucle est infinie : y a-t-il quelque chose qui permet à la condition de boucle de varier.

    La solution est tout simplement de mettre le ligne = br.readLine(); dans la boucle, ou d'utiliser la méthode lines() de BufferedReader (ou Files.readAllLines()). Note qu'il y a aussi Files.walkFileTree pour faire des parcours récursifs de dossiers.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Points : 81
    Points
    81
    Par défaut
    en faite j'ai une fonction qui permet de lire un fichier et dedans c'est la même boucle while et elle marche. du coup j'ai repris ce même code et j'ai changé le nécessaire.
    j'ai mal fais ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Mr.Robot12 Voir le message
    en faite j'ai une fonction qui permet de lire un fichier et dedans c'est la même boucle while et elle marche. du coup j'ai repris ce même code et j'ai changé le nécessaire.
    j'ai mal fais ?
    J'en sais rien : y'a quoi comme code dans cette fonction que tu as reprise ? Et reprendre ça veut dire quoi ? Appeler une méthode ? Copier/coller le code ? Copier/coller le code et le modifier ? En tout cas le while que je vois dans ton code est infini pour la raison que j'ai donnée.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre régulier Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Points : 81
    Points
    81
    Par défaut
    effectivement si je met ligne = br.readLine(); dans la boucle ça marche
    quelle est la meilleure solution d'après vous ?
    cette méthode ou Files.walkFileTree ?

    en tout cas merci

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Ça dépend des besoins.

    Files.walkFileTree a au moins l'intérêt de faire une partie de la logique à ta place.

    Ta méthode charge en mémoire la liste complète des fichiers à traiter. C'est souvent un avantage car cela permet de donner une vague idée de la taille du travail à effectuer et son niveau d'avancement.
    Par contre, dans des cas où il est normal et souhaitable de traiter des dizaines de millions de fichiers, stocker la liste en mémoire est contre-productif, lorsque c'est seulement possible. Files.walkFileTree ne stocke pas grand-chose en comparaison.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier Avatar de Mr.Robot12
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 189
    Points : 81
    Points
    81
    Par défaut
    ah d'accord merci

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

Discussions similaires

  1. [WD16] Incohérence entre les fichiers logiques et les fichiers physiques
    Par lololebricoleur dans le forum WinDev
    Réponses: 8
    Dernier message: 21/10/2011, 11h24
  2. Réponses: 5
    Dernier message: 09/07/2009, 11h15
  3. Réponses: 2
    Dernier message: 16/06/2009, 16h04
  4. Différence entre les fichiers .ss et les fichiers .scm
    Par Djakisback dans le forum Scheme
    Réponses: 2
    Dernier message: 18/11/2008, 18h53
  5. Afficher dans Excel tous les fichiers contenu dans un dossier
    Par popsmelove dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/01/2008, 18h21

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