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 :

[Débutant] Lire un fichier *.ser avec plusieurs objets a l'interieur


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut [Débutant] Lire un fichier *.ser avec plusieurs objets a l'interieur
    Bonjour messieurs...

    Voila dans le cadre des mes PTI pour mon BTS, j'ai developpé un agenda en JAVA, certaine de ces classes sont serializable notement la classe ListePerso.

    L'ecriture de plusieurs objets serialisés dans un même fichier.ser est facile et j'ai reussi par contre pour lire tous les objetsdans un fichier j'ai reussi en partie puisqu'il fait bien le traitement dans mon test de recuperation seul probleme.. a la fin du fichier il me fait une erreur, j'ai cherche ce que je pouvais et tester plusieurs méthodes mais rien n'y fait. C'est surement possible j'ai du mal chercher ou mal utiliser ce que j'avais trouvé quoiqu'il en soit je m'en remet a vous pour avoir un indice de la solution.

    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
     
    public class TestRecup {
     
    	public static void main(String[] args) {	
     
    	ListePerso listeper;
     
    	/*Test pour lecture de plusieur objet serialisé, marche sauf une EOFException sur le dernier :s
    	*/
    	try {
    		FileInputStream fileread = new FileInputStream("listsave.ser");		
    		ObjectInputStream ois = new ObjectInputStream(fileread);		
     
    		listeper = (ListePerso)ois.readObject();
     
    		while (listeper != null) {
    			JOptionPane.showMessageDialog(null,listeper.getNom());
    			ois = new ObjectInputStream(fileread);
    			listeper = (ListePerso)ois.readObject();
    			}		
    		ois.close();
    		}
    	catch (IOException e) {
    	    e.printStackTrace();
    		}	
    	catch (ClassNotFoundException f) {
    	    f.printStackTrace();
    		}		
    	}
    }
    Une fois l'application lancée voici l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java.io.EOFException
    	at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
    	at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
    	at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    	at java.io.ObjectInputStream.<init>(Unknown Source)
    	at test.TestRecup.main(TestRecup.java:30)
    Il est clair que j'ai un probleme a la gestion de l'EOF de mon fichier mais quelque soit ou je la place, les erreurs change ... le code que j'ai poster est le plus proche du resultat voulu... en fait j'ai deux listes perso dans mon fichier pour le test, une appelé lister et une appelé beta. Avec ce code les deux message dialog donne le bon resultat et cette erreur, quand je tentes autre chose soit j'ai trois fenetre 2 avec beta une avec lister, soit j'ai que lister.

    Merci d'avance de l'explication concernant la gestion de cette exception

    Je précise que je ne souhaite pas la solution toute seule, une explication de la solution me suffit amplement, en fonction, je trouverai la solution par moi même ^^

    Cordialement

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    je pense que tu te trompe legerement.

    Tu n'as en fait qu'un seul objet sérializé, une Liste de personne.

    Quand tu restaure la liste, tu restaure les personnes qu'elle a en reference.

    le bloc "while" n'a pas de raison d'etre la.


    autre chose, si tu as modifier ta classe listeperso entre temp, normal qu'il n'arrive pas a la restaurer.
    Systèmes d'Informations Géographiques
    - Projets : Unlicense.science - Apache.SIS

    Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons

  3. #3
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Arf je me suis mal expliqué...

    ListePerso c'est un objet avec un nom et des 5 chaines caractere qui represente des titre de champs personnel dans une liste en gros ... pour vous expliquez je vais donnez les classe.

    Il y as la classe contact avec les caracteristique normale d'un agenda
    Ensuite la classe ami qui herite de contact + quelque champ privé
    La classe travail qui herite de contact + des champs pour la société
    La classe Perso qui herite de contact + les champs qui sont incrit dans la classe ListePerso. Puis la classe liste perso qui elle cree une liste personnelle de l'utilsateur. par exemple si il veut creer plusieurs contacts qui sont par exemple... euh je sais.. pas allez , copine

    Il creer une lisperso qui dont le nom est Copine, avec les 5 champs perso "Age" "Poid" "Taille" "etc" "etc2"

    Dans le fichier Listesave.ser il y as en faite la sauvegarde de toutes les liste personnelle creer par l'utilisateur et donc pas consequent tout leur champs perso. une liste perso Copine , si il creé une liste perso "Loisir" dans le listesave.ser y'aura copine et loisir apres en lisant le fichier de pourrais creer des affichage dans mon menu qui affiche chaque liste personnalisée avec les contact associé ces contact seront de type Perso.

    Ce n'est pas la liste des objet je ne serialise pas une liste de contact mais un objet qui s'apelle ListePerso et qui permet de creer des contact personnalisé d'ailleur pour vous montrer voici la classe listperso et la classe perso.

    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
     
    public class ListePerso implements Serializable {
     
    	String nom,chper1,chper2,chper3,chper4,chper5;
    	String sep = System.getProperty("line.separator");
     
    	public ListePerso (String nom, String chper1, String chper2,String chper3,String chper4,String chper5) {
     
    		this.nom = nom;
    		this.chper1 = chper1;
    		this.chper2 = chper2;
    		this.chper3 = chper3;
    		this.chper4 = chper4;
    		this.chper5 = chper5;
     
    	}
     
     
    etc...
     
    public class Perso extends Contact{
     
    	String chPer1,chPer2,chPer3,chPer4,chPer5;
    	String sep = System.getProperty("line.separator");
     
    	public Perso(String civilite,String nom,String prenom,int numrue,String rue,int codepostal,String ville,String email,String tel,String chPer1,String chPer2,String chPer3,String chPer4,String chPer5) {
     
    		super(civilite,nom,prenom,numrue,rue,codepostal,ville,email,tel);
    		this.chPer1 = chPer1;
    		this.chPer2 = chPer2;
    		this.chPer3 = chPer3;
    		this.chPer4 = chPer4;
    		this.chPer5 = chPer5;
     
    	}
    Pour faire plus simple : Perso posséde 5 champs variable qui prennent les valeurs inscrites dans une ListePerso et ce autant de fois qu'il y as de liste Perso

    C'est pour permettte a l'utilisateur de faire ses propres listes en plus de Amis et travail.

    Je souhaite juste lire toutes les listes perso que crée un utilisateur.

    La preuve du fait que le while fait afficher quand meme deux message box... cela veut dire qu'il recoit bien 2 ListePerso.getnom()

  4. #4
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    J'ai résolu mon probleme en serialisant une collection de liste et non chaque liste les une apres les autre

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

Discussions similaires

  1. Lire fichier txt par plusieurs objets
    Par oumay dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 18/05/2015, 13h42
  2. Réponses: 2
    Dernier message: 09/12/2009, 20h05
  3. [Débutant] Lire un fichier avec un formatage particulier
    Par babounlehobbit dans le forum MATLAB
    Réponses: 8
    Dernier message: 14/03/2007, 09h21
  4. Réponses: 1
    Dernier message: 24/11/2004, 16h54
  5. [BCB 5]Comment lire un fichier AVI avec un TAnimate ?
    Par Sitting Bull dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/09/2004, 11h57

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