[laj1] lire fichier

Voir le sujet précédent Voir le sujet suivant Aller en bas

[laj1] lire fichier

Message  Florent le Lun 26 Avr 2010, 18:29

Bonsoir,

j'ai un souci avec ma methode lireEtat de ma class jeu

Lors que je veux sauvegarder un fichier il n'y a pas de problème le fichier se créé mais lorsque je veux le lire j'ai une erreur de ce type:

Code:

Exception in thread "main" java.io.EOFException
   at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
   at java.io.ObjectInputStream.readObject0(Unknown Source)
   at java.io.ObjectInputStream.readObject(Unknown Source)
   at Jeu.lireEtat(Jeu.java:84)
   at JeuConsole.main(JeuConsole.java:25)

j'ai correctement implements serializable dans les bonnes classes

voici ma methode pour lire un fichier

Code:

   public static Etat lireEtat (String fichier) throws IOException, ClassNotFoundException {
          FileInputStream fis = new FileInputStream(fichier);
           ObjectInputStream ois = new ObjectInputStream(fis);
           Etat unEtat = (Etat) new Etat();
           if(!(ois.readObject() instanceof Etat)) {
              unEtat = (Etat) ois.readObject();
           }
           ois.close();
          
      return unEtat;
   }

Merci d'avance pour votre aide Wink

Florent

Nombre de messages : 93
Prénom : Florent
Date d'inscription : 02/02/2010

Revenir en haut Aller en bas

Re: [laj1] lire fichier

Message  Anthoblack le Lun 26 Avr 2010, 18:50

Plusieurs remarques Wink

Ne faut-il pas fermer ton FileInputStream ?
Ne faut-il pas de try/catch d'une IOException ?
Ne faut-il pas gérer la fin de stream ? => C'est ton erreur...

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: [laj1] lire fichier

Message  DjMan42 le Lun 26 Avr 2010, 18:50

Cette ligne n'est pas nécessaire. Il pourrait te retourner un nouvel état au lieu de l'état enregistrer.

Code:
Etat unEtat = (Etat) new Etat();

Il faut plutôt gerer les exception. Donc c'est pas nécessaire

Code:
if(!(ois.readObject() instanceof Etat)) {

DjMan42

Nombre de messages : 219
Prénom : Eden
Statut : Etudiant 1er Indu
Localisation : Bruxelles
Date d'inscription : 28/10/2008

Revenir en haut Aller en bas

Re: [laj1] lire fichier

Message  DjMan42 le Lun 26 Avr 2010, 19:18

Un petit code de serialisation. Celle du cours.

Spoiler:
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.Date;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Serialisation{
public static void main(String[] args) {
outputS();
inputS();
}

public static void outputS(){
FileOutputStream out = null;
ObjectOutputStream s = null;
try{
out = new FileOutputStream("theTime");
s = new ObjectOutputStream(out);
s.writeObject("Today");
s.writeObject(new Date());
}catch (FileNotFoundException ex) {
System.out.println( "Probleme fnf output");
}catch (IOException ex) {
System.out.println( "Probleme IO output");
}catch (Exception ex) {
System.out.println( "Probleme output");
}
finally {
if ( s != null) {
try {
s .close ();
} catch (IOException ex) {
System.out.println( "Impossible de fermer s");
}
}
}

}

public static void inputS(){
FileInputStream in = null;
ObjectInputStream s = null;
try{
in = new FileInputStream("theTime");
s = new ObjectInputStream(in);
String today = (String)s.readObject();
Date date = (Date)s.readObject();
System.out.println(today);
System.out.println("date : " + date);
} catch (FileNotFoundException ex) {
System.out.println( "Probleme fnf input");
} catch (IOException ex) {
System.out.println( "Probleme IO input");
} catch (Exception ex) {
System.out.println( "Probleme input");
}
finally {
if ( s != null) {
try {
s .close ();
} catch (IOException ex) {
System.out.println( "Impossible de fermer s");
}
}
}

}
}

DjMan42

Nombre de messages : 219
Prénom : Eden
Statut : Etudiant 1er Indu
Localisation : Bruxelles
Date d'inscription : 28/10/2008

Revenir en haut Aller en bas

Re: [laj1] lire fichier

Message  Florent le Lun 26 Avr 2010, 19:57

En effet mon code comportait quelques problèmes

je l'ai améliore:

Code:

public static Etat lireEtat (String fichier) throws IOException, ClassNotFoundException {
          FileInputStream fis = new FileInputStream(fichier);
           ObjectInputStream ois = new ObjectInputStream(fis);
           Etat unEtat = null;
         try {
              unEtat = (Etat) ois.readObject();
           }
         catch (FileNotFoundException ex) {
            System.out.println( "Probleme fnf input");
         }
         catch (IOException ex) {
          System.out.println( "Probleme IO input");
          }
         catch (Exception ex) {
          System.out.println( "Probleme input");
          }
          finally {
          if ( ois != null) {
          try {
          ois.close ();
          } catch (IOException ex) {
          System.out.println( "Impossible de fermer s");
          }
          }
          }
          
          
      return unEtat;
   }

Mais à présent il me renvoi une erreur "problème input" donc Exception Ex à quoi ca peut bien correspondre?

Florent

Nombre de messages : 93
Prénom : Florent
Date d'inscription : 02/02/2010

Revenir en haut Aller en bas

Re: [laj1] lire fichier

Message  DjMan42 le Lun 26 Avr 2010, 20:19

Peut-être que l'objet a était mal crée. Par contre pour l'entête le throws et .... c'est plus nécessaire.
Code:
throws IOException, ClassNotFoundException

DjMan42

Nombre de messages : 219
Prénom : Eden
Statut : Etudiant 1er Indu
Localisation : Bruxelles
Date d'inscription : 28/10/2008

Revenir en haut Aller en bas

Re: [laj1] lire fichier

Message  Anthoblack le Lun 26 Avr 2010, 21:31

Florent a écrit:Mais à présent il me renvoi une erreur "problème input" donc Exception Ex à quoi ca peut bien correspondre?
API :
Throws:
ClassNotFoundException - Class of a serialized object cannot be found.
InvalidClassException - Something is wrong with a class used by serialization.
StreamCorruptedException - Control information in the stream is inconsistent.
OptionalDataException - Primitive data was found in the stream instead of objects.
IOException - Any of the usual Input/Output related exceptions.
J'ai barré ce que tu gérais, à toi de comprendre ce qui reste et catché par Exception Wink (Les trois Exceptions au milieu héritent de IOException)
http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectInputStream.html#readObject%28%29

Note : Ce que tu as mis dans le try ne peut pas lancer d'Exception de type FileNotFound, suivant l'API. Vérifie ça aussi Wink

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: [laj1] lire fichier

Message  pbt le Lun 26 Avr 2010, 21:35

C'est bien de ne plus lire deux fois ton objet .... et de t'étonner que tu atteins la fin de fichier.

Pour avoir des infos sur l'exception que tu captures, tu peux lui demander de fournir son message,
Code:
System.out.println( "Probleme IO input" + ex.getMEssage());

En passant, ta gestion des exceptions est très (comprendre trop) minimaliste ... Tu affiches le problème et tu continues.

Un jour en voiture, la lumière s'allume me signalant qu'il n'y a plus d'huie, je continue, ensuite une autrelumière s'allume m'informant que le moteur chauffe, je continue, ensuite toutes les lumières s'allument m'informant que je dois m'arrêter, je continue ... finalement le moteur s'est arrêté, j'ai miraculeusement pu stopper l'auto ... elle est cassée ;-)



_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [laj1] lire fichier

Message  didi le Lun 26 Avr 2010, 21:49

Un jour en voiture, la lumière s'allume me signalant qu'il n'y a plus d'huie, je continue, ensuite une autrelumière s'allume m'informant que le moteur chauffe, je continue, ensuite toutes les lumières s'allument m'informant que je dois m'arrêter, je continue ... finalement le moteur s'est arrêté, j'ai miraculeusement pu stopper l'auto ... elle est cassée ;-) .........

ce pourqoui vous venez à l'école en tram alors ... Very Happy

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [laj1] lire fichier

Message  Florent le Mar 27 Avr 2010, 00:06

En effet mon erreur est déjà plus explicite : java.lang.String cannot be cast to Etat



J'ai rajouter aussi l'exception pour le cas où le fichier serait introuvable

Florent

Nombre de messages : 93
Prénom : Florent
Date d'inscription : 02/02/2010

Revenir en haut Aller en bas

Re: [laj1] lire fichier

Message  DjMan42 le Mar 27 Avr 2010, 00:32

Petite amélioration
Code:

public static Etat lireEtat (String fichier) throws IOException, ClassNotFoundException {
        FileInputStream fis = null ;
           ObjectInputStream ois = null;
           Etat unEtat = null;
         try {
                        fis = new FileInputStream(fichier);
                   ois = new ObjectInputStream(fis);
              unEtat = (Etat) ois.readObject();
           }
         catch (FileNotFoundException ex) {
            System.out.println( "Probleme fnf input");
         }
         catch (IOException ex) {
          System.out.println( "Probleme IO input");
          }
         catch (Exception ex) {
          System.out.println( "Probleme input");
          }
          finally {
          if ( ois != null) {
          try {
          ois.close ();
          } catch (IOException ex) {
          System.out.println( "Impossible de fermer s");
          }
          }
          }
          
          
      return unEtat;
   }

DjMan42

Nombre de messages : 219
Prénom : Eden
Statut : Etudiant 1er Indu
Localisation : Bruxelles
Date d'inscription : 28/10/2008

Revenir en haut Aller en bas

Re: [laj1] lire fichier

Message  Contenu sponsorisé Aujourd'hui à 18:52


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum