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

AWT/Swing Java Discussion :

probléme avec la sérialisation


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut probléme avec la sérialisation
    Bonjour
    Mon souci est le suivant:j'ai stocké des données dans un fichier(etudiant.txt) grâce à la sérialisation.Le problème est que je ne sais pas comment récupérer les données que j'ai stockées et les afficher.
    Ensuite si j'essaie de mettre 2 enregistrements dans le fichier,est ce que le 2e va écraser le premier?
    Merci d'avance.
    En fait j'ai 2 classes;voici une partie de la 1ere:

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    public void actionPerformed(ActionEvent ev) {
     
     
    		if(ev.getSource().equals(boutonOk)){
    			Etudiant etud=new Etudiant();
     
    			etud.setNom(jtNom.getText());
    			etud.setPrenom(jtPrenom.getText());
     
    			try {
    				FileOutputStream fos=new FileOutputStream("etudiant.txt");
    				ObjectOutputStream oos=new ObjectOutputStream(fos);
    				oos.writeObject(etud);
    				oos.flush();
    				oos.close();
    				   JOptionPane.showMessageDialog(null,"Sauvegarde réussie!");
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
     
    		if(ev.getSource().equals(boutonAfficher)){
    			/*Etudiant fichier=new Etudiant();
     
    			//fichier.setTitre(getTxttitre().getText());
    			//fichier.setPrenom(getTxtcontenu().getText());
     
    			try {
    				System.out.println("reussi");
    				System.out.println("creation de : " + fichier);
    				FileInputStream fis=new FileInputStream("etudiant.txt");
     
    				ObjectInputStream ois=new ObjectInputStream(fis);
     
    			/*	String s = (String)ois.readObject();
    				System.out.println(s);*/
    				//Etudiant f= (Etudiant)ois.readObject();
     
    						//jtNom.setText(f.getPrenom());
    				//jtPrenom.setText(f.getPrenom());
    			//	ois.close();
    		//	} catch (Exception e) {
    				//e.printStackTrace();
    		//	}
    	Etudiant p = null;
     
    			try {
    				// ouverture d'un flux d'entrée depuis le fichier "etudiant.txt"
    				FileInputStream fis = new FileInputStream("etudiant.txt");
    				// création d'un "flux objet" avec le flux fichier
    				ObjectInputStream ois= new ObjectInputStream(fis);
    				try {	
    					// désérialisation : lecture de l'objet depuis le flux d'entrée
    					p = (Etudiant) ois.readObject(); 
    				} finally {
    					// on ferme les flux
    					try {
    						ois.close();
    					} finally {
    						fis.close();
    					}
    				}
    			} catch(IOException ioe) {
    				ioe.printStackTrace();
    			} catch(ClassNotFoundException cnfe) {
    				cnfe.printStackTrace();
    			}
    			if(p != null) {
    				System.out.println(p + " a ete deserialise");
    			}
     
    		}
     
    Et voici la classe Etudiant:
     
    public class Etudiant implements Serializable{
     
    	private String nom;
    	private String prenom;
     
    	public String getNom() {
    		return nom;
    	}
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
    	public String getPrenom() {
    		return prenom;
    	}
    	public void setPrenom(String prenom) {
    		this.prenom = prenom;
    	}
    	public Etudiant() {
     
    	}
     
    }

  2. #2
    Membre expérimenté

    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Par défaut
    La FAQ répond a ce genre de question :

    Comment écrire en fin de fichier : http://java.developpez.com/faq/java/...FICHIER_append
    (la méthode est la même en utilisant la classe FileOutputStream)

    Comment lire un fichier ligne par ligne : http://java.developpez.com/faq/java/...eLigneParLigne

    et surtout :

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    Merci,je m'y mets tout de suite

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    Ok je vois.J'ai aussi lu quelque part qu'on pouvait écrire en fin de fichier en ajoutant tout simplement "true" comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FileOutputStream fos=new FileOutputStream("etudiant.txt",true);
    				ObjectOutputStream oos=new ObjectOutputStream(fos);
    				oos.writeObject(etud);
    				oos.flush();
    				oos.close();
    N'est ce pas?
    Ensuite concernant la lecture ligne par ligne j'ai combiné les FileOutputStream et les BufferedReader() c'est à dire pour sauvegarder les données dans le fichier je fait appel aux FileOutputStream,et pour l'affichage j'utilise BufferedReader.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
    public void actionPerformed(ActionEvent ev) {
     
     
    		if(ev.getSource().equals(boutonOk)){
    			Etudiant etud=new Etudiant();
     
    		int		id = Integer.parseInt(jtNum.getText());				
    			try {
     
    				etud.setNum(id);			
    				etud.setNom(jtNom.getText());
    				etud.setPrenom(jtPrenom.getText());
     
     
    				FileOutputStream fos=new FileOutputStream("etudiant.txt",true);
    				ObjectOutputStream oos=new ObjectOutputStream(fos);
    				oos.writeObject(etud);
    				oos.flush();
    				oos.close();
    				   JOptionPane.showMessageDialog(null,"Sauvegarde réussie!");
    				   jtNum.setText(null);
    				   jtNom.setText(null);
    				   jtPrenom.setText(null);
    			} catch (Exception e) {
     
    				 JOptionPane.showMessageDialog(null,"Sauvegarde non réussie!");
    			}
    		}
     
    		if(ev.getSource().equals(boutonAfficher)){
     
    			try{
    				// Création du flux bufférisé sur un FileReader, immédiatement suivi par un 
    				// try/finally, ce qui permet de ne fermer le flux QUE s'il le reader
    				// est correctement instancié (évite les NullPointerException)
     
    				BufferedReader buff = new BufferedReader(new FileReader("etudiant.txt"));
     
    				try {
    				String line;
    				// Lecture du fichier ligne par ligne. Cette boucle se termine
    				// quand la méthode retourne la valeur null.
    				while ((line = buff.readLine()) != null) {
    				System.out.println(line);
    				//faites ici votre traitement
     
    				}
    				} finally {
    				// dans tous les cas, on ferme nos flux
    				buff.close();
    				}
    				} catch (IOException ioe) {
    				// erreur de fermeture des flux
    				System.out.println("Erreur --" + ioe.toString());
    				}
    }
    apparemment ça marche mais les données qu'il m'affiche sont illisibles,on dirait du chinois mélangé à du turc.Comment faire pour afficher les données normalement?
    Et comment afficher le nombre de lignes de mon choix?
    ( merci beaucoup )

  5. #5
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Salut,

    qu'entends-tu par afficher les données normalement?

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah en même temps la sérialisation c'est pas prévu pour faire des fichiers lisibles à la base...


    A la limite tu peux faire de la sérialisation XML avec l'XMLEncoder

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

Discussions similaires

  1. Problème de dé-sérialisation d'entité avec rake
    Par supergeoffrey dans le forum Ruby
    Réponses: 1
    Dernier message: 22/08/2012, 11h46
  2. Problème avec Sérialisation des tableaux de Axis 1.4
    Par khoufouq dans le forum Services Web
    Réponses: 1
    Dernier message: 26/07/2012, 09h29
  3. Problème avec la sérialisation
    Par subzero01 dans le forum MFC
    Réponses: 6
    Dernier message: 30/06/2010, 19h06
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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