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

Entrée/Sortie Java Discussion :

caractères pertubateurs avec ObjectOutputStream


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut caractères pertubateurs avec ObjectOutputStream
    J'ai un pb, sans doute lié à une mauvais utilisation d'appel de classe :
    Quand je sauve 1 objet dans un fichier, des caractères "perturbateurs" apparaissent dans le fichier.

    Je n'ai pas trouvé sur le forum d'où ça pouvait venir,
    mais peut-être saurez vous me le dire ?
    Merci

    dans Test.java :
    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
     
    public class Test
    {
        public static void main(String [] args)
        {
            String ligne;            // parametre chaine caracteres pour ecrire dans fichier
            String fichierIn="carte.txt";     // Fichier en entrée
            String fichierOut="essai1.txt";    // Fichier en sortie par defaut
     
            int optionsN=args.length;     // nombre d'arguments passes en parametre
            String options ="";        // les arguments seront dans une chaine unique (facilite le traitement)
            if (optionsN==0)
            {
                // Pas d'arguments, on averti l'utilisateur des options possibles.
            }
            else
            {
                switch (optionsN)
                {
                    case 2:
                        fichierOut=args[1];
                    case 1:
                        fichierIn=args[0];
                        break;
                }
            }
     
            SauveFic fic = new SauveFic(fichierOut);
            ligne="\nFichier entree="+fichierIn+" test";
            fic.ecrireLigne(ligne);
                    ligne="\nInitialisation avec un chemin aleatoire :";
             ligne=ligne+"\nDuree optimisation :";
            fic.ecrireLigne(ligne);
                    ligne="\nVoici le meilleur chemin trouve :\n";
            fic.ecrireLigne(ligne);
            fic.fermeFic();
        }
     
    }
    ----------------------------------
    dans la classe SauveFic.java :
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    // Importation des bibliothèques 
    import java.util.Scanner;     // Pour la lecture au clavier
    import java.io.Serializable; // Pour lire/ecrire objets sur fichier
    import java.io.File;        // Lecture ecriture des fichiers
    import java.io.FileOutputStream;
    import java.io.ObjectOutputStream;
    import java.io.IOException;    // pour traiter les erreurs
     
    // Classe pour sauver des objets de maniere generique
    public class SauveFic
    {
        FileOutputStream   o_fo;    // Sert pour l'ecriture sur disque
        ObjectOutputStream o_oo;
        boolean ecritDisque;        // indicateur pour savoir si on a oui ou non une ecriture en sortie 
        String fichierOut;
        private String ligne;
        public SauveFic(String fichierOut)
        {
            try
            {
                // FileOutputStream   o_fo;
                // ObjectOutputStream o_oo;
                if ((fichierOut==null)||(fichierOut=="")) 
                {
                    System.out.println("Il manque le nom de fichier --> pas de fichier en ecriture");
                    ecritDisque=false;
                    // System.exit(0);
                }
                else
                {
                    o_fo = new FileOutputStream(fichierOut);    // Ouvre le fichier en ecriture
                    o_oo = new ObjectOutputStream(o_fo);        // pour ecrire sur le fichier ouvert
                    ecritDisque=true;
                }
            }
     
            catch (IOException e)
            {
                System.out.println(" erreur :" + e.toString());
            }
        }
        // Permet d'ecrire a l'ecran
        // et sur disque si un argument 'out' a ete declare (nom de fichier en sortie)
        public void ecrireLigne(String ligne)
        {
            System.out.println(ligne);
            if (ecritDisque)
            {
                try
                {
                    o_oo.writeObject(ligne);
                }
                catch (IOException e)
                {
                    System.out.println(" erreur :" + e.toString());
                }
            }
        }
        public void fermeFic()
        {
            if (ecritDisque=true)
            {
                try
                {
                    o_oo.flush();
                    o_oo.close();
                }
                catch (IOException e)
                {
                    System.out.println(" erreur :" + e.toString());
                }
            }
        }
    }

  2. #2
    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,

    Citation Envoyé par lylandra6
    Quand je sauve 1 objet dans un fichier, des caractères "perturbateurs" apparaissent dans le fichier.
    C'est à dire ? Quel est l'exception que tu obtiens ???

    a++

  3. #3
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Tu as l'air de vouloir écrire du texte (fichiers .txt) et utiliser ObjectOutputStream n'est pas la meilleure classe à utiliser pour cela. Utilise plutôt un DataOutputStream ou un BufferedOutputStream. A mon avis, tes caractères bizarre viennent de là. L'objectOutputStream est surtout utilisée pour la serialisation de classes de type Java beans, pas d'une String seule.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 116
    Par défaut
    Bonjour,
    Le PrintWriter est plus adpte et plus performant, son constructeur prend en parametre le nom du fichier. une simple methode prinln permet d'ecrire dans le fichier.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut
    En fait, ce n'est pas l'utilisation ObjectOutputStream qui posait problème, mais ma mauvaise utilisation de la variable ligne.
    En fait, il suffit que je mette ligne="" dans le constructeur et à la fin de la méthode qui sauve le contenu,
    et que j'ajoute une methode ajouteLigne (String ele) {this.ligne=this.ligne+ele;}
    Ce devrait marcher.

    Merci

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

Discussions similaires

  1. Caractères accentués avec <html:link>
    Par papysam dans le forum Struts 1
    Réponses: 5
    Dernier message: 25/05/2007, 15h18
  2. Affichage caractères asiatique avec composants standard
    Par FransTreb dans le forum Composants VCL
    Réponses: 5
    Dernier message: 05/12/2005, 17h20
  3. caractères accentués avec Tsearch2
    Par nilytel dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 25/05/2005, 11h34
  4. Insert d'un champ caractères spéciaux avec firebird et php
    Par PHILOSOPHE dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 14/05/2005, 11h18
  5. traitement des caractères spéciaux avec XSLT
    Par Mirgue dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 19/07/2004, 16h57

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