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 :

Serialisation d'objet contenant une collection


Sujet :

Langage Java

  1. #1
    Invité
    Invité(e)
    Par défaut Serialisation d'objet contenant une collection
    Bonjour,

    J'ai un objet Compte qui contient entre autre une Collection d'objets Virement.
    Je sauvegarde l'objet Compte sur le disque dur en le sérialisant. (il implémente Serializable). Virement est lui aussi sérializable.

    Tout se passe bien sauf que la collection de Virements ne se recharge pas.
    En regardant dans l'api, je remarque que Collection n'implémente pas Serializable.

    Alors ma question :
    Comment faire pour récupèrer correctement ma liste de Virements ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Blaise1
    Tout se passe bien sauf que la collection de Virements ne se recharge pas.
    En regardant dans l'api, je remarque que Collection n'implémente pas Serializable.
    Il faudrait connaitre le type exacte de ta collection. C'est lui qui est important et doit surement implémenter Serializable, sinon tu aurais eu une exception...
    De plus je pense que toutes les collections standard de l'API sont Serializable...


    Il faudrait plus de détail...

    a++

  3. #3
    Invité
    Invité(e)
    Par défaut
    Ok,

    Ma collection est une ArrayList

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class Compte implements Serializable {
     
        final static long serialVersionUID = 2307198321122001l;
     
        private Collection virements;
     
        /** Creates a new instance of Compte */
        public Compte() {
            solde = 0;   
            virements = new ArrayList();
        }   
     
    }
    et
    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
     
     public static void save(Compte compte) throws FileNotFoundException, IOException {
     
            ObjectOutputStream out = null;
     
            try {
                File path = new File( Properties.getDataFilesPath() + compte.getNom() + ".cpt");
     
                if ( !new File(Properties.getDataFilesPath()).exists() )
                    new File(Properties.getDataFilesPath()).createNewFile();
     
                // Ecris l'Objet
                out = new ObjectOutputStream(new FileOutputStream(path));
                out.writeObject(compte);
                out.flush();
     
            } catch ( FileNotFoundException ex) {
                ex.printStackTrace();
            } catch( IOException ex) {
                ex.printStackTrace();
            } finally {
                out.close();
            }
     
        }

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    ArrayList implémente Serializable donc de ce coté pas de soucis.

    Quand tu dis que la collection de Virement ne se recharge pas, est-ce qu'elle se retrouve à null ou bien est-elle vide ? Dans les deux cas, as-tu fait un test pour vérifier que ta collection était bien "pleine" juste avant la sérialisation.

    Citation Envoyé par adiGuba
    De plus je pense que toutes les collections standard de l'API sont Serializable...
    Je confirme, elles sont toutes Serializable, sauf la classe DelayQueue (ce qui paraît plutôt logique).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Je ne vois toujours pas pourquoi ta collections ne serait pas restauré !!!
    Donne nous un bout de code qui permettent de reproduire le problème.

    Sinon, cela n'a rien à voir avec ton problème, mais concernant ta méthode save() :

    • En cas d'exception, tu peux te retrouver à tenter de fermer out alors qu'il est null.
    • Pourquoi déclarer dans ta méthode que tu renvois des exception alors que ce n'est pas le cas puisque tu les traites ?
    • Perso je préfère utiliser un bloc try/finally par flux
    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
        public static void save(Compte compte) throws FileNotFoundException, IOException { 
            // Ce code ne devrait pas produire d'exception (si je ne me trompe pas) :
            File path = new File( Properties.getDataFilesPath() + compte.getNom() + ".cpt");
     
            if ( !new File(Properties.getDataFilesPath()).exists() )
                new File(Properties.getDataFilesPath()).createNewFile();
     
            // Et on associe un try/finally à chaque flux :
            FileOutputStream fos = new FileOutputStream(path);
            try {
                ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(path));
                try {
                    out.writeObject(compte);
                    out.flush();
                } finally {
                    out.close();
                }
            } finally {
                fos.close();
            }
        }
    a++

  6. #6
    Invité
    Invité(e)
    Par défaut
    Whaaa génial..
    Merci adiGuba de "corriger" mon code. Sérieusement ça me fais trés plaisir d'avoir des conseils sur ma façon de coder. Tous mes profs me répondaient "Si ça marche c'est que c'est bon..".
    Merci.

    Pour la gestion des exceptions il y à une erreure en effet. Je les traitais parceque je n'avait pas encore d' "affichage des erreures".

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


    Je pense aussi que le problème ne viens pas de la sérialisation. Je regarderais ça plus en détail ce soir (projet perso donc pas au boulot).

    Merci Beaucoup

Discussions similaires

  1. [Entity] Comment exposer un webservice renvoyant un objet contenant une collection<objet>
    Par igorzup dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 05/10/2012, 11h48
  2. [VB.NET] Suppression d'objets dans une collection
    Par master56 dans le forum VB.NET
    Réponses: 7
    Dernier message: 03/06/2010, 21h46
  3. Réponses: 2
    Dernier message: 07/10/2008, 13h17
  4. Objet contenant une collection
    Par hacksi dans le forum Langage
    Réponses: 2
    Dernier message: 28/02/2008, 13h11
  5. Réponses: 5
    Dernier message: 09/07/2006, 18h40

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