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 les fichiers du dossier courant


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2015
    Messages : 50
    Par défaut Lister les fichiers du dossier courant
    Bonjour,

    Pour lister les fichier d'un dossier j'ai trouvé ce code sur le site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     File dir new File("C:\\eclipse-java-luna-SR1-win32-x86_64\\eclipse\\prog\\monprojet\\sousdossier");
     String[] children = dir.listFiles();
    if (children == null) {
    System.out.println("Le dossier n'existe pas.");
    } else {
    for (int i=0; i < children.length;i++){
    String fichier = children[i];
    System.out.println(fichier)
    }
    }
    La ligne surlignée en rouge provoque une erreur. En voyez-vous la raison ?

    D'autre part je souhaiterais que le dossier à lister soit le dossier courant.
    J'ai codé ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    String curDir = System.getProperty("user.dir");
    System.out.println ("Le répertoire courant est: "+curDir);
    String chemin = curDir.replaceAll("\", "\\");
    File dir new File(chemin);
     String[] children = dir.listFiles();
    if (children == null) {
    System.out.println("Le dossier n'existe pas.");
    } else {
    for (int i=0; i < children.length;i++){
    String fichier = children[i];
    System.out.println(fichier)
    }
    }
    Les deux lignes surlignées produisent des erreurs.
    La méthode replaceAll est-elle mal utilisée ?

    Je vous remercie de vos lumières.

  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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par GuyMH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     File dir new File("C:\\eclipse-java-luna-SR1-win32-x86_64\\eclipse\\prog\\monprojet\\sousdossier");
    La ligne surlignée en rouge provoque une erreur. En voyez-vous la raison ?
    Il manque le = entre dir et new.

    C'est le cas aussi dans la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File dir new File(chemin);
    Citation Envoyé par GuyMH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String chemin = curDir.replaceAll("\", "\\");
    On doit toujours doubler un \ (antislash) qui représente le caractère \ dans une constante chaîne. Parce que le \ est le caractère d'echappement : par exemple, pour représenter un retour chariot on met \n, pour une tabulation on met \t. Donc pour que Java comprenne que le \ ne sert pas à échapper le caractère suivant, on le double (la chaine "c:\\truc\nono" n'est pas le chemin vers le dossier "nono" dans le dossier "truc", mais un dossier "truc" retourchariot "nono", ce qui, bien sûr, est impossible (on ne peut pas mettre de retour chariot dans un nom de fichier ou dossier).

    C'est pour ça que dans File dir = new File("C:\\eclipse-java-luna-SR1-win32-x86_64\\eclipse\\prog\\monprojet\\sousdossier"); sont doublés.

    Il faudrait donc écrire String chemin = curDir.replaceAll("\\", "\\");. Mais le premier paramètre de la méthode replaceAll est une expression régulière pour laquelle le \ (donc doublé quand on le saisit dans un constante chaîne), pour laquelle le \\ a un sens, et ne peut être utilisé tel quel (je passe le détail sur les expressions régulières, parce qu'il y a beaucoup à dire : si tu veux en savoir, plus vas voir la documentation de la classe Pattern, ou des tutoriels dédiés). Il faut donc le double également pour que cela soit considéré comme un \ (ou l'échapper par la méthode Pattern.quote()) : curDir.replaceAll("\\\\", "\\"). On peut aussi utiliser curDir.replace("\\", "a"); ou curDir.replace('\\', 'a');.

    Mais il est inutile de gérer ça sur des chaînes que tu ne tapes pas directement dans l'éditeur (ce qui est le cas de la propriété user.dir) : les caractères \ qui s'y trouvent sont déjà des \. En plus d'être inutile, là, tout ce que tu fais, c'est remplacer les \ par des \, ce qui ne fait rien. En plus, ça ne fonctionnerait même pas si c'était nécessaire sur un autre système que Windows, ou ce sont des / (slashs) qui sont utilisés comme séparateurs.

    D'autre part, quand tu utilises la classe File, et que tu tapes un chemin sous forme de chaine constante directement dans l'éditeur, tu peux utiliser des / à la place des \\ : ça marchera exactement pareil (c'est géré en interne par les classes de Java), et ce sera plus facile à écrire.
    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 averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2015
    Messages : 50
    Par défaut
    Merci Joël d'avoir pris du temps pour écrire cette longue réponse très claire.
    Tout fonctionne bien après avoir fait les corrections.
    L'oubli du signe = est impardonnable ! Il ne fait pas bon être débutant...
    Quant aux expressions régulières... aïe aïe aïe !

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

Discussions similaires

  1. lister les fichiers dans dossier et sous dossier
    Par chuspyto dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 12/04/2015, 19h47
  2. Réponses: 1
    Dernier message: 12/09/2012, 12h47
  3. [PC] Lister les fichiers d'un dossier
    Par toto_in_th_sky dans le forum Cobol
    Réponses: 2
    Dernier message: 11/09/2006, 18h44
  4. Lister les fichiers d'un dossier par page
    Par bwatex dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 17/08/2006, 20h09
  5. Réponses: 2
    Dernier message: 24/05/2006, 20h29

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