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] Problème de IOException


Sujet :

Langage Java

  1. #1
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut [débutant] Problème de IOException
    Bonjour à tous.

    Voilà je vais tenter d'en venir au fait assez rapidement.

    J'ai une Hashtable dans laquelle j'ai un ensemble d'objet que je souhaiterais sérialiser lors de la fin de mon application et désérialiser lors de son lancement.

    Pour ce faire j'ai déclarer une méthode comme suit:

    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
    public boolean Serialise_Objet(Hashtable value, String FileName)
        {
            String RepTravail;
            String FS;
            Properties PropLogin = new Properties();
     
            RepTravail = System.getProperty("user.home");
            FS = System.getProperty("file.separator");
     
     
            ObjectOutputStream oos;
            try{
                oos = new ObjectOutputStream(new FileOutputStream(RepTravail + FS + FileName));
     
                System.out.println("\n\tLa collection");
                Enumeration e;
                for ( e = value.elements(); e.hasMoreElements();)
                {
                    /*String NumInvent = (String)e.nextElement();
                    MembresPersonnel MP = (MembresPersonnel)Collection_Piece.get(NumInvent);*/
     
                    PieceMuseeSciencesNaturelles PMSN = (PieceMuseeSciencesNaturelles)e.nextElement();
                    try{
                        oos.writeObject(PMSN);
                    }
                    catch(FileNotFoundException FNF)
                    {
                        System.out.println("Erreur de creation du fichier Collections.ser !! ["+ FNF.getMessage() + "]");
                    }
                    catch(IOException excp)
                    {
                        System.out.println("Erreur d'écriture des pièces !! [" + excp.getMessage() + "]");
                    }
                }
     
                try{
                    oos.close();
                }
                catch(IOException ioexcp)
                {
                    System.out.println("Erreur lors de la fermeture de la collections!! [" + ioexcp.getMessage() +"]");
                }
     
            }
             catch(FileNotFoundException FNF)
            {
                System.out.println("Erreur de creation du fichier Collections.ser !! ["+ FNF.getMessage() + "]");
            }
            catch(IOException excp)
            {
                System.out.println("Erreur d'écriture des pièces !! [" + excp.getMessage() + "]");
            }
     
            return true;
        }
    Lors de la compilation aucun problème, mais lorsque je vais voir dans le fichier obtenu, je me retrouve avec des caractères bizarre dedans, et aucune trace de mes objets. Donc première question, est ce que ma façon de procéder est correcte? Si non, pourriez vous me dire où je devrais faire attention?

    Ensuite, pour la désérialisation de mes objets, j'utilise la méthode suivante:

    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
        public boolean Deserialise_objet(Hashtable Liste, String FileName)
        {
            String RepTravail;
            String FS;
            Properties PropLogin = new Properties();
     
            RepTravail = System.getProperty("user.home");
            FS = System.getProperty("file.separator");
     
     
            ObjectInputStream ois;
            try
            {
                System.out.println("Test1");
     
                String Way = new StringBuffer().append(RepTravail).append(FS).append(FileName).toString();
                ois = new ObjectInputStream(new FileInputStream(Way));
     
     
                System.out.println(ois.getClass());
     
                Object obj = null;
                System.out.println("Test 2");
                try
                {
                    System.out.println("Test dans try 1");
                    while( (obj = ois.readObject()) != null )
                    {
                        System.out.println("Test dans try 2");
                        obj = ois.readObject();
                       /* if ( obj.getClass() == PieceMuseeSciencesNaturelles)
                        {
                            PieceMuseeSciencesNaturelles PMSN = obj;
                            System.out.println("Numero d'inventaire: " + PMSN.getReference() );
                        }*/
                        System.out.println("Numero d'inventaire: " + obj.toString() + "Classe de obj: " +obj.getClass().getName());
                        Liste.put(obj.toString(), obj);
    //                    Liste.add(obj);
                    }
                }
                catch(ClassNotFoundException CNFE)
                {
                    System.out.println("\nErreur lors de la lecture du fichier. [" + CNFE.getMessage() + "]");
                }
                ois.close();
            }
            catch(IOException IOE)
            {
                System.out.println("\nErreur d'entrée sortie lors de la lecture des fichiers. [" + IOE.getMessage() + "]");
            }
            catch(Exception EX)
            {
                System.out.println("\nErreur . [" + EX.getMessage() + "]");
            }
     
            return true;
        }
    Lors de l'appel de cette dernière lors du lancement de l'applicaton, je me retrouve avec le message d'erreur suivant:

    Erreur d'entrée sortie lors de la lecture des fichiers. [null]
    J'ai réussi à situé, enfin j'espère, l'erreur au niveau de l'entrée dans ma boucle de lecture. L'erreur est une erreur de IOExeption. J'ai vérifier mon chemin d'accès et il correspond à l'emplacement de mon fichier.

    Quelqu'un parmis vous aurait-il une idée de la provenance de mes bugs?

    Merci d'avance pour votre aide,
    Richard_Sraing

    p.s.: pour ceux qui ont eux le courage de lire ce message jusqu'au bout, PieceMuseeSciencesNaturelles est bien sûr un objet du type que je souhaiterais sérialiser.

  2. #2
    Invité
    Invité(e)
    Par défaut
    salut,
    pour la deuxième essaye :
    String Way = new String();
    Way = "c:/" + FileName;
    comme ca c'est mieux.
    pour la premère je crois que tu dois accéder aux attributs de tes objets un par un.

  3. #3
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut
    Pour la deuxième comme tu dis, donc la désérialisation, j'ai essayer ta proposition, mais ça ne change rien.

    J'ai fait un affichage de ce que j'obtient et c'est bon. Mais je pense à l'instant ou je tape ce petit post, que il faudrait peut être mettre des doubles \, c-à-d

    C:\\ < le repertoire > \\ <le nom de fichier>
    LE problème est que je n'ai aucune idée de comment faire. Et cela me parraitrait un peu bizarre aussi car pour accéder à un fichier de properties je ne le fait pas.

    Pour la première étape, donc la sérialisation, quand tu dis les attributs, tu veux dire les variables membres de ma classe? Mais alors, quel serait l'interêt de faire une interface permettant de sérialiser un objet entièrement si on doit passer toutes les variables une à une?

    Je ne vois absolument pas d'où pourrait venir mon exception IOException.

    Si parmi vous certains ont d'autres solution, je suis donc preneur.

    Richard_sraing

    [EDIT]:

    au fait, est ce que je peux faire une boucle pour aller lire les objets sérialisé lors de la désérialisation?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while( ois.readObject() != null )
    {
         System.out.println("Test dans try 2");
         obj = ois.readObject();
         System.out.println("Numero d'inventaire: " + obj.toString() + "Classe de obj: " +obj.getClass().getName());
         Liste.put(obj.toString(), obj);
    }

  4. #4
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while( ois.readObject() != null ) {  System.out.println("Test dans try 2"); obj = ois.readObject(); System.out.println("Numero d'inventaire: " + obj.toString() + "Classe de obj: " +obj.getClass().getName()); Liste.put(obj.toString(), obj); }
    Je ne comprends vraiment rien à ce code, c'est pas très logique .
    Tu appelles deux fois readObject(), c'est surprenant, l'erreur vient surement de là. Tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while( (obj = ois.readObject()) != null ) {
         Liste.put(obj.toString(), obj);
    }
    De plus, évite les majuscules pour les noms de variable. Bonne chance.

  5. #5
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut
    ok ben je crois que j'ai trouver, mais expliquer d'où venait l'erreur je ne sais pas.

    Je crois que je me suis un peu emmeler les touches avec mes variables

    ça c'est bien du Richard encore...

    Merci quand même pour les astuces, j'aurais appris 2 ou 3 petites choses au moins...


    @+ Richard_sraing

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

Discussions similaires

  1. [Débutant] Problème de variables
    Par bonnefr dans le forum SWT/JFace
    Réponses: 9
    Dernier message: 12/05/2004, 17h41
  2. Réponses: 2
    Dernier message: 28/04/2004, 11h25
  3. [Débutant] Problème de déconnexion d'une page JSP
    Par amal9 dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 22/01/2004, 13h40
  4. [débutant] Problèmes avec CRegKey
    Par Pedro dans le forum MFC
    Réponses: 4
    Dernier message: 10/11/2003, 15h28
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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