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 :

Ecrire les fichiers contenus dans un dossier dans un fichier texte


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut Ecrire les fichiers contenus dans un dossier dans un fichier texte
    Bonjour, je souhaiterais écrire dans un fichier txt le nom des fichiers contenus dans un dossier. Pour cela, j'ai fais ce code:

    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
     
    	{ 
            final String chemin = "C:\\user\\moi\\ProjetL2\\temp.txt";
            final File fichier =new File(chemin);
    		File[] files = chemin.listFiles();
     
    		try {
                // Creation du fichier
                fichier.createNewFile();
                // creation du writer
                final FileWriter writer = new FileWriter(fichier);
     
                    writer.write(files[i]);
    				writer.write("\n");
                 }   
                 finally {
                    // quoiqu'il arrive, on ferme le fichier
                    writer.close();
                }
            } catch (Exception e) {
                System.out.println("Impossible de creer le fichier");
            }
        }
    cependant, ça ne fonctionne pas, NetBeans ne veut pas compiler... Si quelqu'un pouvait m'aider, cela cerait très gentil
    cordialement

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par UBEtu Voir le message
    cependant, ça ne fonctionne pas, NetBeans ne veut pas compiler... Si quelqu'un pouvait m'aider, cela cerait très gentil
    Commences par nous donner le message d'erreur...


    a++

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    Salut!
    Et bien malgré le fait que j'ai
    NetBeans ne reconnait pas le listFiles...

    De plus, j'ai peur qu'en faisant
    je n'écrive pas le nom de tous les fichiers dans le document texte.
    Bref, je ne sais pas si j'ai été clair ^^'

    Merci d'avance

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par UBEtu Voir le message
    NetBeans ne reconnait pas le listFiles...
    Et quel est le message d'erreur ???



    Citation Envoyé par UBEtu Voir le message
    De plus, j'ai peur qu'en faisant
    je n'écrive pas le nom de tous les fichiers dans le document texte.
    Non il faut boucler sur les éléments du tableau.



    a++

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    Donc, le message d'erreur:
    Cannot find symbol
    Stmbol: listFiles
    location chemin of type String
    En ce qui concerne la boucle , si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=1; i<=files.length();i++)
    {
    writer.write(files[i]);
    writer.write("\n");
    }
    ça devrait marcher, non?

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par UBEtu Voir le message
    Donc, le message d'erreur:
    Cannot find symbol
    Stmbol: listFiles
    location chemin of type String
    Tu appelles la méthode listFiles() sur un objet de type String, au lieu de File.
    Tu devrais plutôt l'appeler sur "fichier" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	final String chemin = "C:\\user\\moi\\ProjetL2\\temp.txt";
    	final File fichier =new File(chemin);
    	File[] files = fichier.listFiles();

    Citation Envoyé par UBEtu Voir le message
    En ce qui concerne la boucle , si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=1; i<=files.length();i++)
    {
    writer.write(files[i]);
    writer.write("\n");
    }
    ça devrait marcher, non?
    Oui si tu comptes bien écrire le nom des fichiers.

    Au passage avec Java 5 le for-étendu serait plus pratique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (String file : files) {
        writer.write(file);
        writer.write("\n");
    }

    a++

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    Merci beaucoup!
    Cependant un problème perciste: au moment où il faudrait écrire dans le fichier texte j'ai une erreur...Nom : Sans titre.png
Affichages : 542
Taille : 19,1 Ko

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    write() attend un objet String et non pas un objet File.
    writer.write(files[i].getName()) ou writer.write(files[i].toString()) devraient faire l'affaire...


    a++

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    Merci beaucoup! J'ai réussi à compiler avec ce code:
    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
                final String chemin = "C:\\user\\moi\\ProjetL2\\temp.txt";
            final File fichier =new File(chemin);
    		File[] files = fichier.listFiles();
     
    		try {
                // Creation du fichier
                fichier.createNewFile();
                // creation du writer
                final FileWriter writer = new FileWriter(fichier);
    			try {for(int i=1; i<100; i++) {
                            writer.write(files[i].getName());
                            writer.write("\n");
                        }}
     
                 finally {
                    // quoiqu'il arrive, on ferme le fichier
                    writer.close();
                }
            } catch (Exception e) {
                System.out.println("Impossible de creer le fichier");
            }
     
     
        }
    cependant, il m'affiche Impossible de creer le fichier...

  10. #10
    Membre expérimenté
    Profil pro
    Opération
    Inscrit en
    Décembre 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opération

    Informations forums :
    Inscription : Décembre 2012
    Messages : 91
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    } catch (Exception e) {
        System.out.println("Impossible de creer le fichier");
        e.printStackTrace();
    }
    Capturer une exception sans permettre de connaitre la source de l'erreur n'est pas conseillé.
    Au minimun ajouté un "e.printStackTrace()" comme ci-dessus.

    D'autre part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    files = fichier.listFiles();
    n'a pas beaucoup de sens (see javadoc : "If this abstract pathname does not denote a directory, then this method returns null")
    Je suppose que c'est quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    files = fichier.getParentFile().listFiles();
    qui est souhaité. (attention ! getParentFile() peut retourner 'null')

    Enfin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i=1; i<100; i++) {
                            writer.write(files[i].getName());
                            writer.write("\n");
            }
    n'est pas correcte car la longueur du tableau 'files' n'est pas connue.
    Je propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i=1; i<files.length; i++) {
                            writer.write(files[i].getName());
                            writer.write("\n");
            }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (File f : files) {
                            writer.write(f.getName());
                            writer.write("\n");
            }

  11. #11
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ça c'est une question de droits. Certains fichiers ou dossiers que tu essaies de toucher sont protégés. On saurait lequel si tu avais utilisé e.printStackTrace() au lieu d'inventer ton propre message d'erreur qui ne dit rien d'intéressant. Ou, encore mieux, si tu n'avais pas mis de try/catch.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    Salut! Merci de vos réponses extrêmement utiles!! . Du coup, j'ai enlevé les try/catch et du coup j'ai ce message d'erreur à la compilation.

    Edit: J'ai réglé le problème. j'ai simplement remplacé mes import par: Maintenant, mon dernier souci est que le retour à la ligne ne fonctionne pas...

    run:
    Exception in thread "main" java.io.IOException: Le chemin d’accès spécifié est introuvable
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(File.java:947)
    at text.Text.main(Text.java:26)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 1 second)

    Un petit rappel de mon nouveau code:

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package text;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
     
    /**
     *
     * @author moi
     */
    public class Text {
     
     
        public static void main(String[] args) throws IOException {
     
                final String chemin = "C:\\user\\moi\\ProjetL2\\DossierTroll\\temp.txt";
            final File fichier =new File(chemin);
             String type = "";
    		File[] files = fichier.getParentFile().listFiles();
     
     
                // Creation du fichier
                fichier.createNewFile();
                // creation du writer
                final FileWriter writer = new FileWriter(fichier);
                    {for(int i=1; i<files.length; i++) {
     
                   if(files[i].isFile())
                   {
                       type="fichier";
                   }
     
                   if(files[i].isDirectory())
                   {
                       type="dossier";
                   }
     
                    writer.write(files[i].getName());
                    writer.write("\n");
                    writer.write(type);
     
                        }
     
     
                    // quoiqu'il arrive, on ferme le fichier
                    writer.close();
     
     
     
     
                    }}
    }

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Bon ben je me suis trompé sur deux choses :
    - Non c'est pas une question de fichiers protégés, c'est une question de fichier ou dossier qui existe pas.
    - Non le message d'erreur ne nous dit pas lequel.

    Mais bon, maintenant qu'on sait que c'est un truc qui existe pas, la cause est évidente, et on le sait parce que tu nous as montré le message d'erreur.

    C:\user, ça n'existe pas en général sous Windows. Je sais que c'est chiant, mais il faut prendre l'habitude de copier/coller les chemins... Et d'échapper/remplacer les \ malheureusement T_T.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut
    Hello! Merci encore pour votre aide très précieuse.

    J'ai réussi faire des sauts de ligne, j'ai mis :
    Sinon j'ai remis un try/catch global pour gérer les exeptions...

    Donc mon code est fonctionnel et liste les éléments contenus dans le dossier spécifié, et indique si ce sont des dossiers ou des fichiers!

    Si ça interesse des gens, voici le code:

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package text;
    import java.io.*;
     
    /**
     *
     * @author moi
     */
    public class Text {
     
     
        public static void main(String[] args) throws IOException {
     
                final String chemin = "C:\\Users\\moi\\Desktop\\temp.txt";
            File fichier =new File(chemin);
             String type = "";
    		File[] files = fichier.getParentFile().listFiles();
     
    	try{
                // Creation du fichier
                fichier.createNewFile();
                // creation du writer
                final FileWriter writer = new FileWriter(fichier);
                    {for(int i=1; i<files.length; i++) {
     
                   if(files[i].isFile())
                   {
                       type="Fichier";
                   }
     
                   if(files[i].isDirectory())
                   {
                       type="Dossier";
                   }
     
                    writer.write(files[i].getName()+"\r\n");
                    writer.write(type+"\r\n");
     
                        }
     
     
                    // quoiqu'il arrive, on ferme le fichier
                    writer.close();
                    }
     
            } catch(Exception e){
                     e.printStackTrace();
          }
     
     
     
                    }
    }
    Merci encore

  15. #15
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Bien joué.

    Maintenant quelques remarques d'amélioration :

    - J'avais oublié, mais t'as bel et bien besoin d'un try... Pour fermer le fichier ouvert quoi qu'il arrive. Dans ton code ce n'est pas le cas, si une erreur arrive le fichier n'est pas fermé. Mais ça ne se fait pas avec un try/catch, ça se fait avec un try-with-resource.

    - createNewFile() est inutile. Le FileWriter se doute bien qu'il doit créer le fichier s'il n'existe pas.

    - La boucle for serait un peu plus simple avec un foreach.

    - Tu initialises ta variable String avec une valeur bidon. Ça ne doit jamais arriver. Une variable locale doit être déclarée à peu près quand on sait quelle valeur lui donner, et il faut lui donner une valeur qui a un sens.

    - Déterminer si l'entrée est fichier ou dossier, doit être un si/sinon. C'est l'un ou l'autre. Il ne faut pas créer artificiellement de situation où le type n'est pas renseigné.

    - "Sinon j'ai remis un try/catch global pour gérer les exeptions..."
    => Ouaip, et tu les gères exactement comme s'il n'y avait pas de try/catch. Tu l'as fait sans raison et ça ne sert absolument à rien. Moi je me demanderais pourquoi mais bon, c'est peut-être que moi.

    En appliquant le tout, ça donne ça :

    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
    final String chemin = "C:\\Users\\moi\\Desktop\\temp.txt";
    File outFile =new File(chemin);
     
    try(Writer writer = new FileWriter(outFile)) {
     
      for(File file : outFile.getParentFile().listFiles()) {
        String type;
        if(file.isDirectory()) {
          type = "Dossier";	
        } else {
          type = "Fichier";	
        }
     
        writer.write(file.getName()+"\r\n");
        writer.write(type+"\r\n");
     
      }
     
    }
    Un chouïa plus épuré et plus clair, et surtout le try-with-resource qui ferme tout bien comme il faut.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Importation de tous les fichiers xlsx d'un dossier dans un fichier xlsm
    Par Chewbie Warrior dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/07/2012, 11h20
  2. Réponses: 0
    Dernier message: 03/09/2010, 10h48
  3. [COMMANDE] copier tous les fichier .c d'une arborescense dans un dossier
    Par SmithC dans le forum Administration système
    Réponses: 3
    Dernier message: 18/02/2010, 14h49
  4. Réponses: 2
    Dernier message: 01/11/2007, 11h07
  5. Importer fichiers txt d'un dossier dans une table
    Par avantoux dans le forum Access
    Réponses: 16
    Dernier message: 28/12/2005, 12h13

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