Serialisation sans écraser des données

Résolu
ddrstyle Messages postés 2 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 17 janvier 2008 - 2 janv. 2008 à 19:27
ddrstyle Messages postés 2 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 17 janvier 2008 - 17 janv. 2008 à 14:34
  Bonjour à tous,

  Alors voilà, j'ai une petite question en ce qui concerne la sérialisation en Java. Je dois stocker (dans un ArrayList) les nom, prénom, pseudo... d'un joueur, puis sérialiser cette liste. Jusque là tout va bien. Car j'ai créé une fenêtre d'Inscription puis une fenêtre de Connexion (qui vérifie le pseudo et le mot de passe entrés avec la liste sérialisée préalablement). Sauf que ceci ne marche qu'avec un joueur, en effet si je créer un nouveau joueur la sérialisation à lieu mais écrase le fichier précèdent.
  Je souhaiterai donc savoir comment faire pour stocker tous les détails de chaque joueur dans le même fichier, ou créer un "Sauvegarde.ser" par joueur. Merci .

cf le code:

--------------------------------------------------------------------------------
    ArrayList liste = new ArrayList(6);
    JTextField Tf_i_Nom;
    JTextField Tf_i_Prenom;
    JTextField Tf_i_Pseudo;
    JTextField Tf_i_MotdePasse;
    JTextField Tf_i_ConfirmationMotdePasse;
    JTextField Tf_i_Credit;

if ((Tf_i_MotdePasse.getText()).equals(Tf_i_ConfirmationMotdePasse.getText()))
        {
            int credit_conversionInscription= Integer.parseInt(Tf_i_Credit.getText());
            Inscription joueur = new   Inscription(Tf_i_Nom.getText(),Tf_i_Prenom.getText(),Tf_i_Pseudo.getText(),Tf_i_MotdePasse.getText(),Tf_i_ConfirmationMotdePasse.getText(),credit_conversionInscription,true);
           
            if(credit_conversionInscription<=10000)
            {
                inscrit = true;

                liste.add(joueur.getNomInscription());
                liste.add(joueur.getPrenomInscription());
                liste.add(joueur.getPseudoInscription());
                liste.add(joueur.getMotDePasseInscription());
                liste.add(joueur.getConfirmationInscription());
                liste.add(joueur.getCreditInscription());
           
                try
                {
                    FileOutputStream fichier = new FileOutputStream("Sauvegarde_joueur.ser");
                    ObjectOutputStream oos = new ObjectOutputStream(fichier);
                    oos.writeObject(liste);
                    oos.flush();
                }
                catch (java.io.IOException io)
                {
                    io.printStackTrace();
                }

--------------------------------------------------------------------------------

2 réponses

forcels Messages postés 64 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 27 août 2010
17 janv. 2008 à 11:24
Hello,

Si tu a déjà un fichier existant, ce qu'il faut faire c'est lire le contenu de ton fichier par la programmation (getInputStream()), le sauvegarder dans une variable, ajouter ton nouveau joueur à la variable, et  la remettre dans le fichier. Ainsi, tu gardes toutes tes données...

Bon si ton arrayList devient très grande, ça risque de faire ralentir ton application... Donc ta solution de faire plusieurs fichiers peut aussi être envisageable. Bon après c'est un peu plus embêtant pour faire une recherche pour tester les logins, mais c'est tout à fait possible.
En connaissant exactement quels fichiers tu dois lire (par exemple tu les mets dans un dossier spécifique), tu fais une boucle dans le dossier et tant qu'il trouve un fichier, il le lit et vérifie le login... Perso je n'ai jamais testé mais je pense que ça peut être possible... Question temps, je pense que c'est plus lent de faire ainsi que de travailler avec un seul fichier. Donc à tester!

Perso je ferais avec l'arrayList en mettant tout dans un fichier. Cette
solution me semble beaucoup plus simple à implémenter que l'autre...

Voila j'espère que j'ai pu t'éclairer un peu :)

forcels
3
ddrstyle Messages postés 2 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 17 janvier 2008
17 janv. 2008 à 14:34
Merci ! J'ai opté pour la solution avec un fichier unique de sauvegarde. En effet, je lis le contenu du fichier puis ajoute à la suite les données d'un autre joueur puis re-sérialise le tout. Méthode efficace pour un nombre pas trop important de joueurs.

Merci encore pour ta réponse.

ddr-style
0
Rejoignez-nous