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 :

enum et fichiers


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut enum et fichiers
    Salut à tous

    J'ai une classe que je sauvegarde dans un fichier en écrivant dans le fichier la valeur de chaque variable privée. Parmi ces variables deux sont du type enum.

    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
     
    public class Pion {
     
    	private TypeCamps Camps; //enum
    	private int Valeur;
    	private TypePion Type;//enum
    	private int X, Y;
     
    	public Pion(TypeCamps CA, int V, TypePion Ty, int Xo, int Yo, boolean InitGraph) {
    		Camps = CA;
    		Valeur = V;
    		Type = Ty;
    		X = Xo;
    		Y = Yo;
    ........
    	}
     
     
     
     
    public void Sauve(FileOutputStream Fich){
     
    		try {
    			Fich.write(Camps.ordinal());
    			Fich.write(Type.ordinal());
    			Fich.write(Valeur);
    			Fich.write(X);
    			Fich.write(Y);			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    public void Charge(FileInputStream Fich){
     
    	try {
    		Camps=Fich.read();		
    		Type=Fich.read();
    		Valeur=Fich.read();
    		X=Fich.read();
    		Y=Fich.read();
    	} catch (IOException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    }
    Ça se passe bien pour l'enregistrement car j'enregistre (sauf erreur de ma part) la valeur ordinale de mon enum. Par contre pour la lecture je ne sais pas comment faire? J'ai essayé quelque chose comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Camps=(TypeCamps)Fich.read();
    mais visiblement il n'en veut pas.
    voici comment sont déclarés mes enum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public enum TypePion {
    	Rond,Carre,Triangle,Pyramide;
    }
     
    public enum TypeCamps {
    	Rouge,Bleu;
    }
    Merci d'avance pour vos réponses.

  2. #2
    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 : 42
    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
    Par défaut
    Si tu as stocké l'ordinal alors tu récupère l'ordinal lors du read soit un int. Tu ne peux pas caster un int en une enum. Pour récupérer la valeur de l'enum correspondant à l'ordinal tu peux utiliser la méthode values()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int ordinal = Fich.read();
    Camps = TypeCamps.values()[ordinal];
    Pourquoi n'utilises tu pas la sérialisation pour sauvegarder ton objet dans un fichier ?
    Note que par convention le nom des membres d'une classe commence généralement par une minuscule .
    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 :resolu:

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

  3. #3
    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
    ne passe pas par l'ordinal (on ne doit pas utiliser cette méthode) mais utilise tout bonnement toString().
    tu stockes ainsi le nom de l'instance et après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String chaineLue = ******* ;
    TypePion pion = TypePion.valueOf(chaineLue) ;
    edit: pour les enums la tradition des noms est plutot: tout en majuscule. donc ROND, CARRE, PYRAMIDE.

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tout d'abord quelques remarques :
    • Il est préférable de respecter les conventions de nommage Java. Sinon la lecture du code en devient ambigue...
    • Ton traitement des exceptions laisse à désirer. En cas de problème tu te contentes d'affichier un message sur la console. Donc au niveau software tu n'as aucun moyen de détecter l'exception
      Il serait préférable de la laisser reonter...
    • Pourquoi utiliser directement des FileInputStream/FileOutputStream ? Si tu ne souhaites lire que des fichiers simples utilises des File/String représentant le nom du fichier et ouvre le toi-même. Si tu veux un truc plus générique utiliser des InputStream/OutputStream...



    Sinon pour ton problème : chaque enum possède une méthode static retournant un tableau contenant toutes ses valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Camps = TypeCamps.values(Fich.read());

    a++

    [edit] grillé... et bien

  5. #5
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Il est préférable de respecter les conventions de nommage Java. Sinon la lecture du code en devient ambigue...
    Je viens de me lancer en java et je dois avouer que je ne me suis pas trop penché sur les conventions. J'ai plus l'habitude de coder en C et je met des majuscules car je trouve ça plus lisible. Mais promis je ne le ferais plus
    Citation Envoyé par adiGuba Voir le message
    Ton traitement des exceptions laisse à désirer. En cas de problème tu te contentes d'affichier un message sur la console. Donc au niveau software tu n'as aucun moyen de détecter l'exception
    Il serait préférable de la laisser reonter...
    Exact mais ce n'est pas ma préoccupation principale pour le moment je règlerais ça par la suite. Il est d'ailleurs for probable que je pose quelques questions à ce sujet .

    Citation Envoyé par adiGuba Voir le message
    Pourquoi utiliser directement des FileInputStream/FileOutputStream ? Si tu ne souhaites lire que des fichiers simples utilises des File/String représentant le nom du fichier et ouvre le toi-même. Si tu veux un truc plus générique utiliser des InputStream/OutputStream...
    Là encore n'ayant pas une bonne connaissance de java j'ai été au plus court ce qui n'est pas forcément le plus judicieux. Vu que le y@m's me suggère d'utiliser la sérialisation pour sauvegarder mon objet dans un fichier.

    Citation Envoyé par adiGuba Voir le message
    Sinon pour ton problème : chaque enum possède une méthode static retournant un tableau contenant toutes ses valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Camps = TypeCamps.values(Fich.read());
    Il semble préférer une syntax de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Camps=TypeCamps.values()[ord];
    Donc à priori problème résolu (je vérifie et je met la balise résolue)

  6. #6
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut
    Ca a bien marché mais j'ai finalement changé mon fusil d'épaule et utilisé la sérialisation.

    Merci à tous

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/10/2007, 13h56
  2. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 09h38
  3. Réponses: 5
    Dernier message: 20/08/2002, 18h01
  4. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 23/05/2002, 18h31
  5. Fichier PDOXUSRS.NET
    Par yannick dans le forum Paradox
    Réponses: 5
    Dernier message: 05/04/2002, 09h45

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