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

Entrée/Sortie Java Discussion :

Stocker le résultat dans des fichiers


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 100
    Points : 36
    Points
    36
    Par défaut Stocker le résultat dans des fichiers
    Salut;
    j'ai crée ce code qui permet de lire les lignes d'une fichier, et prendre chaque ligne de cette fichier et la mettre dans un fichier à part, mais le problème c'est que tous les fichiers que je reçois ne contient que la dernière ligne.
    pouvez vous me corriger le programme SVP.
    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
    public static void main(String args[]) throws IOException {
     
            FileInputStream fstream = new FileInputStream("/home/Bureau/CaptureEcrant/Message.txt");
     
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
            while ((strLine = br.readLine()) != null) {
                Writer output = null;
                for (int i = 0; i < 400; i++) {
                    File fil = new File("/home/Bureau/CaptureEcrant/message/file" + i + ".txt");
                    output = new BufferedWriter(new FileWriter(fil));
                    output.write(strLine);
                    output.close();
                }
            }
            //    System.out.println(strLine);
        }
    merci

  2. #2
    Membre actif Avatar de akrom
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 201
    Points
    201
    Par défaut
    A chaque itération de ton while tu réécrit entièrement le fichier
    Pour ajouter une ligne à la fin du fichier voir la faq
    On peut tout faire seul avec de la persévérance mais ça va plus vite à plusieurs.

    Je ne répondrais pas aux questions technique par MP .

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 100
    Points : 36
    Points
    36
    Par défaut
    Merci
    j’espère que vous avez bien compris ce que je voulais dire ?, est ce que vous avez bien lu mon message?, le problème c'est que tous les fichiers que je reçois ne contient que la dernier ligne du fichier "Message.txt".

  4. #4
    Membre chevronné

    Homme Profil pro
    Ingénieur R&D en informatique
    Inscrit en
    Août 2011
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur R&D en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 313
    Points : 1 855
    Points
    1 855
    Par défaut
    bonjour,

    Selon moi, ton problème est dû au fait qu'à chaque itération du while, tu recrées 400 fichiers (file1, file2, ..., file400) et tu écris la ligne courante du fichier Message.txt. A la prochaine itération du while, tu ré-ouvres ces mêmes fichiers en écriture et tu écris la ligne courante du fichier Message.txt. Ce qui a le malheur de détruire tout ce que contenait le fichier et de recommencer à zéro une nouvelle écriture. D'où il est normale qu'à la fin de ton itération while, tu ne vois que la dernière ligne du fichier Message.txt qui soit écris dans tes fichiers.

    Je ne sais pas si je me fais bien comprendre!!!

    A mon avis, tu devrais ouvrir tes 400 fichiers (file1, file2, ..., file400) une seule fois et puis parcourir chaque ligne du fichier Message.txt pour écrire dans chacun de ces fichiers.

    La solution est donc d'inverser ta boucle while avec celle du for :

    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
     
    public static void main(String args[]) throws IOException {
     
            FileInputStream fstream = new FileInputStream("/home/Bureau/CaptureEcrant/Message.txt");
     
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
             for (int i = 0; i < 400; i++) {
                    File fil = new File("/home/Bureau/CaptureEcrant/message/file" + i + ".txt");
                  Writer output = null;
                  output = new BufferedWriter(new FileWriter(fil));
                  while ((strLine = br.readLine()) != null) { 
                    output.write(strLine);
                    // System.out.println(strLine);
                  }
                   output.close();
                   //on réinitialise le pointeur de ligne du fichier Message.txt qui est actuellement en fin de ligne, en debut, pour pouvoir refaire le même travail sur le fichier file i+1.
                  BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     
             }
        }
    En espérant t'avoir aidé,

    Cordialement.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 100
    Points : 36
    Points
    36
    Par défaut
    merci pour votre aide;
    concernant la dernière ligne de réinitialisation il ne l’accepte pas, puisque il existe déjà, je ne sais pas est ce que je dois ajouter qqchose, pour le résultat, en effet, la première fichier (file0.txt) contient tous le résultat, et les autre (400 file) sont vide, avez vous une idée.
    merci

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Points : 268
    Points
    268
    Par défaut
    Tu n'as pas besoin de la boucle for. Il te suffit de créer une boucle while parcourant ton fichier texte ligne par ligne. Et pour chaque ligne récupérés tu créés un nouveau fichier.

    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
    public static void main(String args[]) throws IOException {
     
            FileInputStream fstream = new FileInputStream("/home/Bureau/CaptureEcrant/Message.txt");
     
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
            int i =0;
            Writer output = null;
            while ((strLine = br.readLine()) != null) {
                File fil = new File("/home/Bureau/CaptureEcrant/message/file" + i + ".txt");
                output = new BufferedWriter(new FileWriter(fil));
                output.write(strLine);
                output.close();
                i++;
            }
            //    System.out.println(strLine);
        }

  7. #7
    Membre chevronné

    Homme Profil pro
    Ingénieur R&D en informatique
    Inscrit en
    Août 2011
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur R&D en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 313
    Points : 1 855
    Points
    1 855
    Par défaut
    Salut tupac25,

    Je crois que tu n'a pas compris le problème qu'à poser AI_LINUX. Si dans la boucle while tu crées un fichier et tu écris la ligne courante, à la fin tu ne créeras qu'un nombre de fichier qui est égale au nombre de ligne dans le fichier Message.txt et chaque fichier ne contiendra qu'une ligne. Ce qui ne réponds pas à la problématique de AI_LINUX.

    Cordialement.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Points : 268
    Points
    268
    Par défaut
    permet de lire les lignes d'un fichier, et prendre chaque ligne de ce fichier et la mettre dans un fichier à part
    C'est ce que je comprends lorsque je lis ses indications.

  9. #9
    Membre chevronné

    Homme Profil pro
    Ingénieur R&D en informatique
    Inscrit en
    Août 2011
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur R&D en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 313
    Points : 1 855
    Points
    1 855
    Par défaut
    Salut AI_LINUX,

    C'est normal que le reste de fichiers soit vide, parce que la réinitialisation de la lecture du fichier Message.txt ne se fait pas après la première itération de la boucle for.

    J'ai fait une petite erreur dans ton code que j'ai retouché. L'erreur c'est que j'ai redeclaré la variable br. Ce qui ne doit pas se faire. Il faut plutôt faire une simple affectation à cette variable br. Voir 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
     
    public static void main(String args[]) throws IOException {
     
            FileInputStream fstream = new FileInputStream("/home/Bureau/CaptureEcrant/Message.txt");
     
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
             for (int i = 0; i < 400; i++) {
                    File fil = new File("/home/Bureau/CaptureEcrant/message/file" + i + ".txt");
                  Writer output = null;
                  output = new BufferedWriter(new FileWriter(fil));
                  while ((strLine = br.readLine()) != null) { 
                    output.write(strLine);
                    // System.out.println(strLine);
                  }
                   output.close();
                   //on réinitialise le pointeur de ligne du fichier Message.txt qui est actuellement en fin de ligne, en debut, pour pouvoir refaire le même travail sur le fichier file i+1.
                   br = new BufferedReader(new InputStreamReader(in)); 
     
             }
        }
    Tiens nous au courant du résultat, mais ça devrait marché à 100% maintenant.

    Cordialement.

  10. #10
    Membre chevronné

    Homme Profil pro
    Ingénieur R&D en informatique
    Inscrit en
    Août 2011
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur R&D en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 313
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par tupac25 Voir le message
    C'est ce que je comprends lorsque je lis ses indications.

    Salut tupac25,

    la suite de la phrase que tu indiques oriente un peu plus le problème :

    mais le problème c'est que tous les fichiers que je reçois ne contient que la dernière ligne.
    Cordialement.

  11. #11
    Membre actif Avatar de akrom
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 201
    Points
    201
    Par défaut
    Le code de misterKool doit fonctionner.
    L'autre solution est d'ajouter du texte en fin de fichier comme expliquer dans la faq :
    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
    public static void main(String args[]) throws IOException {
     
            FileInputStream fstream = new FileInputStream("/home/Bureau/CaptureEcrant/Message.txt");
     
     
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
            while ((strLine = br.readLine()) != null) {
     
                for (int i = 0; i < 400; i++) {
                    File fil = new File("/home/Bureau/CaptureEcrant/message/file" + i + ".txt");
     FileWriter writer = null;
                    try{
    //création d'un FileWriter avec l'option d'ajout a un fichier
         writer = new FileWriter(fil, true);
         writer.write(strLine,0,strLine.length());
    }catch(IOException ex){
        ex.printStackTrace();
    }finally{
      if(writer != null){
         writer.close();
      }
    }
                }
            }
            //    System.out.println(strLine);
        }
    On peut tout faire seul avec de la persévérance mais ça va plus vite à plusieurs.

    Je ne répondrais pas aux questions technique par MP .

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Points : 268
    Points
    268
    Par défaut
    Je pense que sont problème est que pour ses 400 fichiers créés, il écrit dans tous les fichiers la derniere ligne de son fichier source. Ce qui est normal car d'après son code il réalise les étapes suivantes:
    1) Il Récupère 1ere ligne de son fichier source
    2) Il écrit cette même ligne dans les 400 fichiers créés
    3) Il récupère la ligne suivante
    4) Il re-écrit dans ces même fichiers en surchargeant (il perd la ligne écrite précédement)

    les étapes 3 et 4 sont répétées jusqu'à avoir récupéré toutes les lignes du fichier source. Au final il a donc 400 fichiers contenant la derniere ligne de son fichier source, d'où:
    mais le problème c'est que tous les fichiers que je reçois ne contient que la dernière ligne.

  13. #13
    Membre chevronné

    Homme Profil pro
    Ingénieur R&D en informatique
    Inscrit en
    Août 2011
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur R&D en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 313
    Points : 1 855
    Points
    1 855
    Par défaut
    tupac25,

    Est-ce que t'as lu le tout dernier post de AI_LINUX????

    merci pour votre aide;
    concernant la dernière ligne de réinitialisation il ne l’accepte pas, puisque il existe déjà, je ne sais pas est ce que je dois ajouter qqchose, pour le résultat, en effet, la première fichier (file0.txt) contient tous le résultat, et les autre (400 file) sont vide, avez vous une idée.
    merci
    si tu l'avais fait, tu aurais compris que nous ne sommes même plus au niveau de la problématique, on a déjà dépasser cette étape. On cherche maintenant à corriger un truc dans le programme pour tout va bien (ce que je lui ai d'ailleurs déjà proposé). Je pense qu'il vaut mieux lire les précédents posts avant de réagir.

    Cordialement.

  14. #14
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Selon moi la solution proposée par misterKool ne convient pas. En effet, à la première itération l'intégralité du fichier source "message.txt" est copiée dans le premier fichier "file0.txt" ce qui implique que les 400 autres fichiers seront vides.

    Ce qui coïncide avec la dernière remarque de l'auteur.

    Le problème initial n'est donc pas résolu!

    J'ai testé toutes les solutions proposées ici et selon ma compréhension du problème je pense que tupac25 a donné la solution.

    Dans tous les cas, c'est à l'auteur de venir ici s'exprimer!

    A+

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Points : 268
    Points
    268
    Par défaut
    On dirait que c'est plutot toi, misterKool, qui ne comprend pas tout au problème...

    Merci à BillyNirvana de valider la solution que j'ai donné.

    Cordialement,

  16. #16
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 51
    Points : 71
    Points
    71
    Par défaut
    C'est normal que tu n'aies que la dernière ligne. Réfléchis un peu. A chaque fois tu écris 400 fichiers avec la ligne que tu as lus et ce jusqu'à la fin. C'est pourquoi à la fin, tu à 400 fois ta dernière ligne. (En plus 400, c'est vraiment pourri)

    Avant de dire au gens qu'ils ont mal lu ton problème (Ca m'enerve ce genre de réponse). Tu ferais mieux d'essayer de comprendre ce qu'ils veulent te dire. Le brave gars qui t'as répondu en premier a bien raison alors va voir la faq, va lire la javadoc et revois ton algorithmie.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 100
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par tupac25 Voir le message
    Tu n'as pas besoin de la boucle for. Il te suffit de créer une boucle while parcourant ton fichier texte ligne par ligne. Et pour chaque ligne récupérés tu créés un nouveau fichier.

    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
    public static void main(String args[]) throws IOException {
     
            FileInputStream fstream = new FileInputStream("/home/Bureau/CaptureEcrant/Message.txt");
     
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
            int i =0;
            Writer output = null;
            while ((strLine = br.readLine()) != null) {
                File fil = new File("/home/Bureau/CaptureEcrant/message/file" + i + ".txt");
                output = new BufferedWriter(new FileWriter(fil));
                output.write(strLine);
                output.close();
                i++;
            }
            //    System.out.println(strLine);
        }
    Merci beaucoup, votre code m'a bien aidé.
    Merci a vous tous.

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Points : 268
    Points
    268
    Par défaut
    Derien, mais le code que je t'ai donné est n'est pas vraiment correcte, je n'ai fait que reprendre ton code et je l'ai rendu fonctionnel. Tu devrais l'amélioré, il te suffit d'aller voir la FAQ :
    -Lire un fichier ligne par ligne
    -Ecrire à la fin d'un fichier

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

Discussions similaires

  1. POO, stocker le résultat dans des variables
    Par nicolas2603 dans le forum Langage
    Réponses: 2
    Dernier message: 26/10/2012, 11h40
  2. stocker les résultats dans des vecteurs
    Par ebenmous dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 26/06/2011, 17h35
  3. Stocker les résultats dans des ensembles
    Par ebenmous dans le forum Général Java
    Réponses: 2
    Dernier message: 05/06/2011, 12h06
  4. erreur lors de l'affichage des résultat dans des fichier
    Par bouabid_hanen dans le forum Fortran
    Réponses: 3
    Dernier message: 19/11/2010, 09h34
  5. Stocker des résultats dans un fichier
    Par usthb23 dans le forum MATLAB
    Réponses: 9
    Dernier message: 28/12/2009, 14h25

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