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

Collection et Stream Java Discussion :

Lire un fichier Hashtable


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut Lire un fichier Hashtable
    Bonjour, je sais mon titre n'est pas très explicite mais je vais m'expliquer :

    J'utilise un programme qui sauvegarde une class étendue par Hashtable<String, Object> dans un fichier très simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
    out.writeObject(dataHastable);                        
    out.close();
    ( code du programme d'origine je n'y ai pas accès )

    Où dataHastable est la class étendue.

    Maintenant je souhaite lire ce fichier depuis mon application pour cela j'ai essayé comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ObjectInputStream in = new ObjectInputStream(new FileInputStream(f));
    dataHastable= (LecteurHastable)in.readObject();
    in.close();
    ( code de mon programme )

    mais il ne veut pas puisque le package et la class n'ont pas le même nom que le programme l'ayant généré. l'exception qui est levée est java.lang.ClassCastException

    En gros la class d'origine ne peut pas être "castée" par ma class .

    Maintenant si je mets le meme nom de package et le même nom de class ca marche, mais ca me dérange un peu.

    Auriez vous une idée ?

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    pourquoi tu n'utilises pas la classe d'origine (celle de dataHastable) lors de la lecture ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    Citation Envoyé par Alkhan Voir le message
    bonjour,

    pourquoi tu n'utilises pas la classe d'origine (celle de dataHastable) lors de la lecture ?
    Je n'ai pas accès à la classe d'origine. Elle se trouve dans un programme dont je n'ai pas accès ni au code ni à la fonction en elle même.

    J'ai créé une classe similaire mais elle ne marche avec le fichier que je veux lire que si le nom de package et de la classe sont les même que sur le programme "d'origine" .

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Citation Envoyé par Jose.N70 Voir le message
    Je n'ai pas accès à la classe d'origine. Elle se trouve dans un programme dont je n'ai pas accès ni au code ni à la fonction en elle même.
    c'est plutôt étonnant d'avoir de la sérialisation sur un objet qui n'est pas accessible de l'extérieur ! Mais bon !

    Citation Envoyé par Jose.N70 Voir le message
    J'ai créé une classe similaire mais elle ne marche avec le fichier que je veux lire que si le nom de package et de la classe sont les même que sur le programme "d'origine" .
    c'est tous a fait normal car dans son principe, la sérialisation indique la classe qui est sérialisé, ainsi que certain élément de ca structure et ces données bien sur.
    Conclusion lorsque tu sérialises un objet, il faut avoir la classe disponible pour pouvoir le désérialiser.
    Si vraiment tu n'a pas accès à la classe d'origine, tu n'as pas le choix, il faut que tu la reproduise !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par Jose.N70 Voir le message
    Je n'ai pas accès à la classe d'origine. Elle se trouve dans un programme dont je n'ai pas accès ni au code ni à la fonction en elle même.
    dans ce cas l'Exception levée devrait être ClassNotFoundException si tu as ClassCast c'est que la classe est bien accessible! non?

  6. #6
    Membre confirmé Avatar de Jose.N70
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    Si tu veux, le programme A génère son fichier ( le hashtable ) pour lui même, sans se préoccuper de savoir si une autre personne peut en avoir besoin.

    Moi avec mon programme B je voulais simplement lire ce fichier, le programme B j'y ai accès comme c'est le mien, mais le programme A je ne suis que utilisateur, c'est comme si avec mon programme je voulais lire un fichier généré par windows ( sauf que la c'est un programme en java ... ) .

    Mais avec tes explications Alkhan je comprends mieux. Dommage qu'il ne soit pas possible de faire autrement.

    Pour professeur shadoko, je cast l'objet avec ma propre classe et non avec celle du programme A.

    On va considérer le sujet comme résolu par faute de solution

    Merci à vous

  7. #7
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par Jose.N70 Voir le message
    Pour professeur shadoko, je cast l'objet avec ma propre classe et non avec celle du programme A.
    je l'avais bien vu .... mais ma remarque tiens toujours: je ne comprends pas pourquoi tu obtiens un ClassCast avant un ClassNotFound
    Si le type encodé est X et que tu fasses (Y) readObject() alors le runtime détecte que X et Y sont incompatibles ... donc il a trouvé X, donc X est accessible et tu ne devrais pas avoir de problème à réecrire ton code...
    Si le runtime n'avait pas trouvé X alors tu aurais une ClassNotFoundException non? (ou il y a encore quelque chose qui m'échappe?)

  8. #8
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    cependant professeur shadoko a raison, je n'avais pas fait attention mais tu as en effet un ClassCastException, cela signifie que la classe correspondant à dataHastable est bien accessible au lieu de faire un cast LecteurHastable il faut juste que tu fasses un cast de la classe correspondant à dataHastable.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Servlet][EJB]lire un fichier à partir de mon bean
    Par kimausoleil dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/02/2004, 14h26
  2. [MFC] lire un fichier en int
    Par Kevgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 09h32
  3. Réponses: 5
    Dernier message: 11/01/2004, 20h17
  4. Lire un fichier de 50 gb
    Par Maryves dans le forum MFC
    Réponses: 2
    Dernier message: 08/01/2004, 14h08
  5. Lire le fichier du port série
    Par saibe dans le forum Linux
    Réponses: 7
    Dernier message: 09/04/2003, 09h29

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