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

Langage Java Discussion :

Lire Contenu d'un fichier


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut Lire Contenu d'un fichier
    Bonjour,

    Objectif : Enregister des Objets dans un fichier et Les retaurer depuis ce fichier.

    Ecriture dans le fichier:
    J'ai utillisé la méthode writeObject de la classe ObjectOutputStream pour enregister mes objets. L est un objet de la classe Livre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FileOutputStream fout= new FileOutputStream("out.txt");
    ObjectOutputStream out= new ObjectOutputStream(fout);
    out.writeInt(L);
    out.close();
    Récupérer les livres stockés depuis le fichier:
    Dans cette phase où j'ai le problème : je n'arrive pas à réccupérer mes objets. Voilà comment je procède:
    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
     
     
    try{
                FileInputStream fis = new FileInputStream("mesEmploye.txt");
                ObjectInputStream ois = new ObjectInputStream(fis);
                List<Livre> L = new ArrayList<livre>();
     
                if(ois.available() == 0) System.out.println("0 BYTES");
     
                if(ois.read() == -1) System.out.println("viiiide");
     
                else{
                        try {
                            while(ois.available() > 0){
                                try{
                                     L.add((Livre) ois.readObject());
     
                                 }
                                 catch(ObjectStreamException ose) {}
                                 catch(ClassNotFoundException cnfe) {}
                                catch (EOFException e){}
                           }
                        }
                        finally { ois.close(); }
                }
    }catch (EOFException e){ e.getMessage(); e.printStackTrace(); }
     catch (FileNotFoundException e) {e.printStackTrace();}
     catch (java.io.IOException e) { e.printStackTrace(); }
     catch(Exception e){ e.getMessage(); e.printStackTrace();}
    il m'affiche toujours :
    0 Bytes
    Viiiiiiide
    Malgrès que le fichier a été bien alimenté.


    Merci pour vos aides.

    Sisiniya

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Par défaut
    Je ne comprends pas ceci :
    Si L est un Livre, ce n'est pas un int, donc ça ne doit pas compiler.

    Je n'ai pas lu la suite ...

  3. #3
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    pardon, oui tout à fait raison ça n'a pas de sens, c'est just une faute de copier/coller from mon code.

    je veux dire writeObject vu que L est un objet de la classe Livre.

  4. #4
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    En cherchant sur le Web, j'ai trouvé pas mal de personne qui ont le même problème, mais je n'arrive pas à comprendre la source de ce probème :

    Ils disent que :
    si on utilise ObjectOutputStream pour enregister nos objets, on aura un problème lors de la lecture de ces objet depuis le fichier, de telle sorte que lors de la lecture, on ne pourra lire que le premier objet qui est enregistrer dans le fichier.

    Source de problème que je n'ai pas compris :
    ils disent que à chaque fois qu'on enregistre un objet avec ObjectOutputStream, ce dernier crée un Header !!, ce qui fait qu'il va créer ce Header autant de fois qu'on fait appel à ObjectOutputStream pour enregister un autre livre

    Merci pour vos aides.


    Sisiniya.

  5. #5
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 342
    Par défaut
    Bonjour,

    peut être un début de réponse ici: http://www.developpez.net/forums/d10...s/#post5807091

    En espérant que cela vous soit utile...

    @bientôt...

  6. #6
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Merci pour le lien, je l'ai consulté, et j'ai fait la même chose.

    Pour bien cerner Le problème :

    Cas 1: Si le fichier est vide -> y a pas de problème (aucune exception n'est élevé)
    Cas 2:
    Si j'enregister un seul objet Livre dans le fichier et j'essaye par la suite de le lire depuis le fichier -> aucun problème, il m'affiche l'objet correctement
    Cas 3:
    Si j'essaye d'enregister un autre Livre dans le fichier et quand j'essaye de le lire depuis ce dernier -> Erreuuuur !!!!

    Merci encore pour vos aides.

    Sisiniya.

  7. #7
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 342
    Par défaut
    Bonjour,

    lors de l'ajout d'un second objet, vous indiquez que lors de la lecture du fichier, vous obtenez une erreur... est-ce une exception qui est levée, et si oui, savez-vous laquelle ?

    @ bientôt...

  8. #8
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    je peux ajouter autant que je veux sans aucun problème. Mais, lors de la lecture et si dans mon fichier plus d'un objet qui est stocké voilà à quoi ressemble l'execution :

    il m'affiche le premier Objet correctement suivi d'une exception suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    java.io.StreamCorruptedException: invalid type code: AC
            at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356)
            at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
            at projet_java.Main.readLivre(Main.java:113)
            at projet_java.Main.main(Main.java:26)

    Merci.

  9. #9
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 342
    Par défaut
    Bonjour,
    dans votre code, essayez de forcer la vidange du flux vers le fichier par un Ainsi lors de la fermeture du flux, vous êtes certains que le flux de données a été trandféré sur le fichier...

    @ bientôt...

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

Discussions similaires

  1. Lire contenu d'un fichier txt.gz
    Par metalcoyote dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/10/2008, 11h36
  2. lire contenu d'un fichier
    Par Piccolo_son dans le forum Langage
    Réponses: 5
    Dernier message: 16/12/2007, 17h49
  3. Lire le contenu d'un fichier PDF
    Par skywaukers dans le forum Delphi
    Réponses: 6
    Dernier message: 18/07/2006, 12h01
  4. Réponses: 5
    Dernier message: 16/03/2005, 22h17
  5. [Fichier] Lire le contenu d'un fichier
    Par bart64 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 19/09/2004, 18h18

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