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

Java Discussion :

[Serialisation]Questions


Sujet :

Java

  1. #1
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut [Serialisation]Questions
    Salut,

    J'ai un projet dans lequel je dois utiliser des fichiers qui contiennent des objets. Je dois par la suite pouvoir mettre à jour le fichier (ajout, suppression, modification). J'ai entendu parler de sérialisation binaire et xml je sais pas trop où me lancer. Quelqu'un pourrait m'aider?
    Merci
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  2. #2
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Une petite recherche sur le site developpez.com, tu peux trouver cela :

    http://java.developpez.com/faq/java/?page=langage_xml


    Une petite recherche des fois fais gagner du temps!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  3. #3
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut Que choisir:fichiers binaires ou textes?
    Merci pour les liens. En fait je sais pas trop comment résoudre mon problème, ce que je sais c'est que je dois utiliser les fichiers pour ça.
    Voila de quoi parle mon exo:

    un etablissement à 1 ou plusieurs professeurs. un professeur enseigne une ou plusieurs matières. une matière à plusieurs coefficients (cela dépend de la classe).
    Je voudrais un conseil, il serait mieux d'utiliser des fichiers textes ou des fichiers binaires sachant que les informations seront mises à jour? et pourquoi?

    Merci
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  4. #4
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Si j'ai bien compris, le but de ton exercice est la manipulation de fichier.

    Car etant donné l'énoncé de ton exercice, je t'aurais conseillé de telepcharger Mysql (par exemple) et de construire ton modele relationnelle..

    Si le but de ton exercice est la serialisation, la manipulation de fichier est transparente.. donc tu n'as pas de question à te poser concernant le type de fichier à manipuler.

    Par contre si le but de ton exercice est l'acces à des fichiers en lecture/ecriture explicitement, alors il ne faut pas que tu utilises la serialisation mais plutot les classes du package java.lang.io.*

    Bon maintenant l'enonce de ton exo décrit une relation entre differente entité...
    Tu dois gerer cela au niveau des classes metiers...Normalement ce genre de chose se fait au niveau de la base de donnée.

    Maintenant si tu a le droit d'utiliser une base ... fais le!!


    J'espere que cela t'aidera.. si tu as des questions n'hesites pas!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  5. #5
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Salut,

    Une fois de plus merci. Le prof a exigé d'utiliser les fichiers le but etant leur manipulation, mais n'a pas imposé un type ou un accès au fichier. Merci de votre aide, je vais utiliser les classes du package java.lang.io.*

    Merci.
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  6. #6
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Salut c'est encore moi. Dites je voudrais savoir quelle valeur me renvoit la methode readObject() quand je suis à la fin du fichier. en fait je voulais parcourir le fichier un peut comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (?) // je ne suis pas à la fin du fichier
    {
        // désérialisation avec readObject
    }
    Merci.
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  7. #7
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Ben il y a la Javadoc!!

    Bon! la methode readObject renvoie un Object ... que tu dois 'downcaster' dans le bon type de l'objet que tu deserializes!



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ObjectInputStream in = new .....
     
    MyType myType = (MyType)in.readObject();
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  8. #8
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Bonjour, je crois que vous ne m'avez pas bien compris.

    je n'arrive pas à parcourir tout mon fichier qui contient les objets de la classe Region. En fait je ne sais pas comment tester la fin du fichier.

    la classe Region:

    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
     
     
    import java.io.Serializable;
     
    public class Region implements Serializable 
    {
    	String idreg;
    	String nomreg;
     
    	public Region()
    	{
    	}
     
    	public void set_id_reg(String id)
    	{
    		idreg = id;
    	}
     
    	public void set_nom_reg(String nom)
    	{
    		nomreg = nom;
    	}
     
    	public String get_id_reg()
    	{
    		return idreg;
    	}
     
    	public String get_nom_reg()
    	{
    		return nomreg;
    	}
    }
    ici j'essaye de lire les objets du fichier

    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
     
    ...
    try
    {
     FileInputStream f = new FileInputStream("region");
     ObjectInputStream o = new ObjectInputStream(f);
     
     Region reg = (Region) o.readObject();
     
     while (?) // ici je veux lire jusqu'à la fin du fichier
     {
       System.out.println("id region: " + reg.get_id_reg());
       System.out.println("nom region: " + reg.get_nom_reg() + "\n");
     
       reg = (Region)o.readObject();
     }
     
     o.close();
     f.close();
    }
    catch(IOException fe)
    {
    }
    Merci
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  9. #9
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Je ne suis pas un pro de la serialization!

    Mais normalement lorsque tu serializes un objet cela veut dire que tu persistes l'etat de ton objet , c'est a dire que tu fais passer ton objet de l'etat actif à l'etat passif

    Lorsque tu deserialises cela veut dire que tu le fais passer de l'etat passif à l'etat actif.

    Donc il n'y aucune notion de parcourir un fichier ou autre.

    si les champs de ton objet avaient comme valeur :X et Y
    Lorsque tu deserialiseras ton objet il aurat les meme valeur accessible via les getters et les setters.
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  10. #10
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 85
    Points
    85
    Par défaut
    si tu veux tester la fin de fichier, essaies de capturer une EOFException.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try {
     while(true) {
         //readObject
     }
     
    } catch(EOFException eof) {
     
    } catch(//autres exceptions...) {
     
    }

  11. #11
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Merci ça marche.

    Dites ainsi il n'est donc pas possible de modifier la valeur (un attribut) d'un object dans le fichier, du genre je lis puis je modifie puis j'écris à nouveau, vu que FileInputStream c'est pour écrire et FileOutputStream pour lire? autrement dis je ne peux pas accéder au fichier en lecture et en écriture?

    Merci
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 20
    Points
    20
    Par défaut utilises une collection ou une classe qui en joue le role
    Salut,

    pour ne pas avoir à utiliser des astuces concernant la fin de fichier. Voila ce que je te conseille :
    - utilise une Collection (implementation de List, Map ou autre )
    - crée une classe, appelons-la MaBaseDeDonnees qui contient tout ce que tu veux et implémente Serializable.

    La 2ème solution est celle que je préfère car elle est la plus orientée objet.
    De plus, cela te permet de rajouter toutes les méthodes dont tu as besoins :
    deleteRegion, addRegion, getRegion ...

  13. #13
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Merci.
    Excuse moi mais j'ai pas bien saisi. Je crée une classe MaBasedeDonnées qui va contenir les instances des autres classes comme attribut (Region, Departement, ...), les methodes qui permettront la mise à jour je les écris où? dans la classe MaBasedeDonnées ou dans la classe correspondante (deleteRegion dans la classe Region).
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  14. #14
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Et aussi, quand j'écris dans le fichier, j'écris un objet de MaBasedeDonnees?

    Merci
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 20
    Points
    20
    Par défaut Ap
    Excuse moi mais j'ai pas bien saisi. Je crée une classe MaBasedeDonnées qui va contenir les instances des autres classes comme attribut (Region, Departement, ...),
    Oui, c'est ça. La classe MaBasedeDonnées est le point de départ qui te permet de récupérer toutes informations dont tu pourrais avoir besoin (Region, Departement, ...). Après, les liens entre les classes dépendent du problème à traiter

    les methodes qui permettront la mise à jour je les écris où? dans la classe MaBasedeDonnées ou dans la classe correspondante (deleteRegion dans la classe Region).
    ca dépend tu problème à traiter.

    Et aussi, quand j'écris dans le fichier, j'écris un objet de MaBasedeDonnees?
    Tu écris l'unique instance de la classe MaBasedeDonnees (design pattern singleton) dans le fichier. Le mécanisme de serialization JAVA fait le reste et serialize tous les objets liés (attributs) qui ne sont pas 'transient' et qui sont 'Serializable' et ce de manière récursive.

  16. #16
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Merci, c'est clair maintenant. Je mets au boulot.
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  17. #17
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Salut,
    je croyais avoir compris mais une fois devant ma machine j'ai pu rien écrire.
    Je n'écris qu'une seule instance de MaBasedeDonnees là c'est clair. Mais les attributs de cette classe eux ne seront pas écris une fois! puisque je ne sais pas combien de region ni de département mon fichier va contenir.

    [code]

    public class MaBasedeDonnees implements Serializable
    {
    Region reg;
    Departement dept;
    ...
    }

    [code]

    là ça veut dire que si j'écris une instance de MaBasedeDonnees j'aurai un seul departement et une seule region ou je me trompe. Comment je fais? un tableau de region? une liste? Franchement je comprends pas.

    Merci du coup de main.
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    à ça veut dire que si j'écris une instance de MaBasedeDonnees j'aurai un seul departement et une seule region ou je me trompe. Comment je fais? un tableau de region? une liste? Franchement je comprends pas.
    Si, justement tu as compris il faut un tableau ou une collection.
    Pour cela tu peux par exemple utiliser un ArrayList.

    Si tu as besoin de plus d'informations, il serait bien que tu donnes l'énonce de ton exercice/tp/cahier des charges ou quelque chose qui précise ce que tu veux : une région est-elle liée à un département ? si oui, comment ? ......

  19. #19
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Salut,
    J'ai essayé d'utiliser les vecteurs et ça marche. Pensez vous que ce soit
    une meilleure façon de faire?

    la classe Donnees qui contient un vecteur de region

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    public class Donnees implements Serializable 
    {
      Vector region = new Vector();
     
      public Donnees(){}
      ...
    }
    la methode addRegion pour ajouter une region. le paramètre reg
    est le nom de la region a ajouter

    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
     
     
      public void addRegion(String reg)
      {
        try
        {
          // j'ouvre une connexion en lecture
          File fichier_donnees = new File("donnees");
          FileInputStream flux = new FileInputStream(fichier_donnees); 
          ObjectInputStream obj = new ObjectInputStream(flux);
     
          // lecture de l'unique objet donnees dans le fichier: je suppose qu'il 
          // y'en a un
          Donnees data = (Donnees)obj.readObject();
     
          // nouvel object Region avec reg comme nom
          Region r = new Region(reg);
     
          // j'ajoute la region au vecteur de la classe Donnees
          data.region.addElement(r);
     
          // j'ouvre une connexion en écriture
          FileOutputStream flux1 = new FileOutputStream(fichier_donnees); 
          ObjectOutputStream obj1 = new ObjectOutputStream(flux1);
     
          // j'écrase l'ancien objet Donnees par lui même (il a été modifié)
          obj1.writeObject(data);
     
          // fermeture de la connexion ouverte en ecriture
          obj1.close();
          flux1.close();
          System.out.println("Ecriture terminée");
     
          // fermeture de la connexion ouverte en lecture					
          obj.close();
          System.out.println("\n Ajout effectue\n");
        }
     
        catch(EOFException e)
        {
          System.out.println("\n Fin du fichier région\n");
        }
     
        catch(FileNotFoundException fe)
        {
          System.out.println("erreur " + e.getMessage());
        }
     
      }
    Merci beaucoup
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Salut,
    dans l'idée c'est à peu près ça. Mais je n'aurais pas fait comme ça.

    A chaque ajout d'une région : tu fais une lecture du fichier, tu ajoute la région, puis tu sauve dans le fichier.

    Pour une région c'est ok mais pour plusieurs, vaut mieux :
    - lire le fichier (ajoute une méthode lire)
    - ajouter toutes les régions (boucle avec n appel à la méthode addRegion(region))
    - écrire le fichier (ajoute une méthode ecrire)

    et n'oublie pas de fermer les Stream(obj et flux, dans ton code), même pour les *InputStream !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Question Serialise et CArchive
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 30/01/2007, 22h46
  2. Questions pour serialise
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 02/08/2005, 18h45
  3. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11
  4. Question de faisabilité
    Par lisarasu dans le forum CORBA
    Réponses: 3
    Dernier message: 14/05/2002, 11h26
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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