Test sérialisation qui ne marche pas... ? [Résolu]

Messages postés
14
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
26 janvier 2010
- - Dernière réponse : bbrizn
Messages postés
14
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
26 janvier 2010
- 18 janv. 2010 à 18:14
Bonjour à tous,
voici un code d'entrainement que j'utilise pour vérifier la sérialisation d'un nom et prénom.
vous pourrez constater que tant qu'on ajoute des identités, la liste s'implémente bien, mais dès qu'on quitte et reviens dedans, on repart d'un fichier vierge.
c'est vraiment un point bloquant car même sur d'autres sites et aides en ligne, je ne comprends pas mon erreur.
si quelqu'un pouvait regarder ce que j'ai oublié, ce serait vraiment sympa.
bonne journée.
Didier

package mon.test.perso;

/*
* Les imports
*/

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


/**
* Blanchard Didier
* Class ....
* description ....
*
*/
public class SerialiseOuPas extends JFrame implements Serializable {

/**
* attributs
*/
private static final long serialVersionUID = 1424L;
private JPanel container = new JPanel();
private JFormattedTextField tonNom = new JFormattedTextField();
private JLabel label = new JLabel("saisir votre nom");
private JLabel label3 = new JLabel("votre Prénom");
private JTextField tonPrenom = new JTextField();

private JButton c = new JButton ("Sauvegarde");


//ma liste pour la sérialisation
ArrayList<String> al = new ArrayList<String>();

/*
* Other méthods ....
*/


public SerialiseOuPas(){

this.setTitle("test sérialistation");
this.setSize(500, 180);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);

container.setBackground(Color.white);
container.setLayout(new BorderLayout());

/**
* définition des formats de saisie
*/


JPanel top = new JPanel();

Font police = new Font("Arial", Font.BOLD, 14);
tonNom.setFont(police);
tonNom.setPreferredSize(new Dimension(100, 30));
tonNom.setForeground(Color.BLUE);


tonPrenom.setFont(police);
tonPrenom.setPreferredSize(new Dimension(100, 30));
tonPrenom.setForeground(Color.BLUE);


c.addActionListener(new BoutonListener2());

top.add(label);
top.add(tonNom);
top.add(label3);
top.add(tonPrenom);
top.add(c);
this.setContentPane(top);
this.setVisible(true);
}


/**
* Classe interne qui lance l'enregistrement et la mise à zero des jtext lorsque l'on clique sur le bouton sauvegarde
*/
class BoutonListener2 implements ActionListener { // SAUVEGARDE

public void actionPerformed(ActionEvent e) {
System.out.println("==> on entre dans le bouton OK");
System.out.println("==> le nom saisi est égale à " + tonNom.getText());
System.out.println("==> le prénom saisi est égale à " + tonPrenom.getText());


//CREATION AUTRE LISTE
al.add(tonNom.getText());
al.add(tonPrenom.getText());

for(int i = 0; i < al.size(); i++)
{
System.out.println("vous avez rentré dans votre liste " + i + " = " + al.get(i));
}

// parcours de la liste :
// récupération de la taille de la liste
int listeTaille = al.size();

System.out.println("taille actuelle de la liste : " + listeTaille);


for (int i = 0; i < listeTaille; i++) {

al.get(i);

// test visible qui fonctionne, on vide le formulaire

tonNom.setText("");
tonPrenom.setText("");

System.out.println("===> vérification du Vidage des Jtextfield nom et prénom : " + tonNom.getText() + " <=="+ tonPrenom.getText());


/*
* BLOC DE SERIALISATION
*/

// déclaration pour sérialisation.

ObjectInputStream ois;
ObjectOutputStream oos;

//AddActionCopySerialisable maSerialization = new AddActionCopySerialisable();

try {

oos = new ObjectOutputStream(new BufferedOutputStream (new FileOutputStream(new File("nomPrenom.dat"))));

//Nous allons écrire chaque objet al de l'arraylist dans le fichier

Object o = al;
oos.writeObject(o);

System.out.println(" ===> oos vient d'être renseigné dans le flux" + o);


// methode pour vider le cache si besoin


//NE PAS OUBLIER DE FERMER LE FLUX ! ! !
oos.flush();
oos.close();


// FIN DE SERIALISATION

// on récupère les données


ois = new ObjectInputStream(new FileInputStream("nomPrenom.dat"));
System.out.println("===> on ouvre le fichier et on charge son flux dans ois " + ois);

/*
* Deserialisation
*/

try {
ois.readObject();
System.out.println("==> test de sortie " + o);
} catch (ClassNotFoundException e1) {
System.out.println("the cath error is : " + e1);

e1.printStackTrace();
}

ois.close();

//--------------------------------------------------------

} catch (FileNotFoundException ee) {
ee.printStackTrace();
} catch (IOException ee) {
ee.printStackTrace();
}

}

}

}

public JComponent getJFrame() {

return null;
}


}
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
5331
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 avril 2019
105
3
Merci
Salut,


Pourquoi tu deserializes le fichier après enregistrement ? (totalement useless)
Pourquoi tu ne deserialize jamais au démarrage si le fichier est la ? tu repars toujours d'une liste vide donc normale que tu n'ais rien dedans.




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Twinuts
Messages postés
14
Date d'inscription
mercredi 16 décembre 2009
Statut
Membre
Dernière intervention
26 janvier 2010
0
Merci
merci Twinuts d'avoir répondu à mes deux postes, je galérais vraiment sur ce truc, je vais repartir de ton conseil.
Didier.
Commenter la réponse de bbrizn

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.