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 :

une classe c'est cool, savoir s'en servir c'est mieux!


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Points : 111
    Points
    111
    Par défaut une classe c'est cool, savoir s'en servir c'est mieux!
    Bonsoir à tous!

    Alors voila tout est dans le titre!

    Pour ceux qui suivent ce que je fais depuis quelques temps aujourd'hui, j'ai donc trouvé LA classe qu'il me faut. Elle va faire des sauvegardes!
    Seul bémol, je ne vois pas comment m'en servir, c'est à dire que je n'arrive pas à appeler la methode sauvegarde(Object objet).

    Voici ma classe:
    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
    58
    59
    60
    61
    62
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
     
    public class FichierObjet{
     
    	String nomFichier;
    	ObjectOutputStream fichierE;
    	ObjectInputStream fichierL;
    	boolean ohyeah;
     
    	public FichierObjet(String nomFichier)
    	{
    		this.nomFichier=nomFichier;
    	}
    	private boolean ouvrirFichierE()
    	{
    		ohyeah=true;
    		try{fichierE=new ObjectOutputStream(new FileOutputStream(nomFichier));}
    		catch(Exception e){ohyeah=false;}
    		return ohyeah;
    	}
    	private boolean fermerFichierE()
    	{
    		ohyeah=true;
    		try{fichierE.close();}
    		catch(Exception e){ohyeah=false;}
    		return ohyeah;
    	}
    	private boolean ouvrirFichierL()
    	{
    		ohyeah=true;
    		try{fichierL=new ObjectInputStream(new FileInputStream(nomFichier));}
    		catch(Exception e){ohyeah=false;}
    		return ohyeah;
    	}
    	private boolean fermerFichierL()
    	{
    		ohyeah=true;
    		try{fichierL.close();}
    		catch(Exception e){ohyeah=false;}
    		return ohyeah;
    	}
    	public boolean sauvegarder(Object objet)
    	{
    		ohyeah=ouvrirFichierE();
    		try{fichierE.writeObject(objet);}
    		catch(Exception e){ohyeah=false;}
    		fermerFichierE();
    		return ohyeah;
    	}
    	public Object charger()
    	{
    		ohyeah=ouvrirFichierL();
    		Object objet=null;
    		try{objet=fichierL.readObject();}
    		catch(Exception e){ohyeah=false;}
    		fermerFichierL();
    		return objet;
    	}
    }
    On va prendre l'exemple que je veux sauver un int qui a pour valeur 20 dans un fichier sauvegarde.txt

    Pourriez-vous m'aider svp à faire ceci?

    Merci à tous
    Bonne soirée
    Aud-

  2. #2
    Membre averti Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Points : 356
    Points
    356
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int n=20;
    FichierObjet fichier = new FichierObjet("sauvegarde.txt");
     
    fichier.sauvegarde(new Integer(i));
    comme ceci ?

  3. #3
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    pour completer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private class Toto{
       public String nom="toto";
    }
    fichier.sauvegarde(new Toto());

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Points : 111
    Points
    111
    Par défaut
    pour vos codes, j'ai un problème avec la ligne du type: fichier.sauvegarde(new Integer(i));

    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
     
    import java.io.*;
     
    public class Voiture implements Serializable{
     
    	public static void main (String[] args) {	
     
    	int i=20;
     
    	FichierObjet fichier = new FichierObjet("sauvegarde.txt");
     
    	fichier.sauvegarde(new Integer(i));
     
    	}
     
    }
    eclipse me souligne le mot sauvegarde et me dit que la methode sauvegarde (Integer) n'existe pas dans la classe FichierObjet.

    en effet la fonction sauvegarde à en paramètre un objet, pas un int. Comment faire?

    Merci à tous
    aud-

  5. #5
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Il serait temps de penser à consulter un ophtalmo
    sauvegarder

  6. #6
    Membre averti Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Points : 356
    Points
    356
    Par défaut
    en même temps, la première faute vient de moi, j'avais oublié le r, donc si on a copié mon code on a copié ma bêtise, désolé

    enfin c'est une leçon à prendre, éviter le copier/coller, ça apporte plus d'erreur qu'autre chose ^^

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Points : 111
    Points
    111
    Par défaut
    en effet j'ai copié betement!

    je peux encore vous ennuyez?lol


    ce programme permet de sauvegarder 1 donnée.
    Comment en sauvegarder plusieurs ?

    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
     
    import java.io.*;
     
    public class Voiture implements Serializable{
     
    	public static void main (String[] args) {	
     
    	int i=20;
    	boolean t=false;
     
    	FichierObjet fichier = new FichierObjet("sauvegarde.txt");
     
    	fichier.sauvegarder(new Integer(i));
    	fichier.sauvegarder(new Boolean(t));
     
    	System.out.println("valeur relue:"+fichier.charger());
     
    	}
     
    }
    car la je crois remarquer que le deuxième élément (boolean t) écrase le premier (int i).

    Merci à tous!
    Aud

  8. #8
    Membre averti Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Points : 356
    Points
    356
    Par défaut
    oui, tu sauvegarde en fait un objet, par exemple si tu souhaites sauvegarder, toutes les informations concernant un joueur d'un jeu, il faut que l'objet représentant le joueur possède toutes ces informations.

    imaginons, une classe joueur, avec des attributs, score, techniques, niveau etc.. il suffit de serializer l'objet pour "sauver" toutes ces informations, et de le "déserializer" pour les lire.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Points : 111
    Points
    111
    Par défaut
    heum oui, je comprends bien le principe! mais j'ai peur que la mise en forme soit dure à mon niveau...

    J'ai en effet un programme avec trois tableaux à sauvegarder.

    Il faudrait donc que je modifie la classe qui s'occupe des sauvegardes?

  10. #10
    Membre averti Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Points : 356
    Points
    356
    Par défaut
    ben par exemple, mettre ces trois tableaux dans un ArrayList, puis sauvegarder ce dernier ?

    enfin utiliser un conteneur quoi, voire plutôt collection, ce serait plus juste vu qu'on est en Java, conteneur serait plus adapté à C++

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Points : 111
    Points
    111
    Par défaut
    ha tu veux dire que tous les trucs que j'ai à sauvegarder je les mets dans une seule chose qui sera sauvegarder?! comme ça je modifie pas ma classe?

    heum... je ne sais meme pas ce qu'est un arraylist je vais chercher...

    merci en tout cas
    aud-

  12. #12
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Exactement, c'est la méthode sauvegarder qu'ils modifier de telle manière que la sauvegarde de tes trois objets se fasse à la suite (en gros 3 appels successifs à writeObject). Il va de soit que la méthode charger devra être modifiée en conséquence.
    Un conseil, maintenant que tu as l'exemple et le principe de fonctionnement de la sérialisation, implente-là directement dans ton code sans passer par l'utilisation de la classe FichierObjet.

Discussions similaires

  1. Savoir si une classe est instanciée ?
    Par Sancha dans le forum Langage
    Réponses: 3
    Dernier message: 09/11/2009, 14h15
  2. Comment savoir avec quel JDK une classe est compilé
    Par menzlitsh dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2009, 17h21
  3. [POO] C'est quoi une classe en claire...???
    Par Spack dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 26/01/2009, 15h53
  4. Réponses: 2
    Dernier message: 29/06/2006, 16h33
  5. Réponses: 6
    Dernier message: 06/12/2004, 22h18

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