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 :

enregistrer un fichier en unicode


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 62
    Points
    62
    Par défaut enregistrer un fichier en unicode
    Hello,
    je voudrais savoir si quelqu'un sait comment faire pour dire qu'il veux enregistrer un fichier en unicode UTF-16.
    en fait je met dans un bufferwriter de l'unicode et apres je fais bufferedwriter.flush();
    mais le prob c'est qu'il enregistre comme si c'était du texte et pas de l'unicode dc sa merde.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     FileWriter fw = new FileWriter("ini-inspector-tmp.ini", false); 
     
            /**
             * le BufferedWriter output auquel on donne comme argument le FileWriter fw cree juste au dessus 
             */ 
            BufferedWriter output = new BufferedWriter(fw); 
     
    ligne = new String ( contenuFile.getBytes(), "UTF-16" );
              output.write(ligne); 
              output.newLine();
    et le resultat dans le fichier est :
    ?????
    ?????‰
    ??????????????????
    ???
    ??????????????????
    ??????????????
    ?????????????
    ?????†??????????
    ?????

  2. #2
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Je te propose cette solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    FileOutputStream outFile = new FileOutputStream("ini-inspector-tmp.ini");
    OutputStreamWriter writer = new OutputStreamWriter(outFile, "UTF-16");
    Writer output = new BufferedWriter(writer);
     
    /* A mon avis c'est superflu */
    String ligne = new String ( contenuFile.getBytes(), "UTF-16" );
     
    output.write(ligne);
    output.newLine();
    output.close();
    writer.close();
    outFile.close();
    Je ne connais pas la classe de la variable contenuFile, dommage....

    Pour la prochaine fois, essaie d'avoir un code minumum compilable pour pouvoir plus facilement te proposer une solution. ;-)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    contenuFile c'est juste un string.
    je viens de test ton code et a priori ca va pas mais je te montre tous le code et je t'explique a quoi il sert.
    En fait je dois faire des modifications sur des fichiers de configuration (.ini). donc je lie le fichier de depart et j'ecrire de facon parallele sur un fichier temporaire (qui contient lui les modicfications).
    Et pour finir j'ecrase le contenu de l'ancien fichier pour copier le contenu du tmp qui contient les modif.
    voici le code pour ecrire dans les fichiers tmp.
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    public static void writeUnicode (String file, String key, String session, String value) throws IOException{
      System.out.println("Je suis dans la fonction write unicode");
      BufferedReader lecteurAvecBuffer = null;
      String Tmp="";
         String contenuFile="";
         String ligne;
         int exist = 0;
         String s="";
         int n = 0;
         File fDestination = new File(file);
     
         /**
          * Fichier temporaire qui permet de copier toutes les lignes du fichier file qui ne sont pas modifie et de modifie ce qui a ete modifie
          * ce fichier temporaire sera copier sur le file et suprimer 
          */
         copier(new File(file),new File("ini-inspector-tmp.ini"));
         FileWriter fw = new FileWriter("ini-inspector-tmp.ini", false); 
         File fSource = new File("ini-inspector-tmp.ini");
        // FileOutputStream outFile = new FileOutputStream("ini-inspector-tmp.ini");
        // OutputStreamWriter writer = new OutputStreamWriter(outFile, "UTF-16");
       //  Writer output = new BufferedWriter(writer);
     
            /**
             * le BufferedWriter output auquel on donne comme argument le FileWriter fw cree juste au dessus 
             */ 
           BufferedWriter output = new BufferedWriter(fw); 
         if(fDestination.canWrite()){
          try{
           lecteurAvecBuffer =  new BufferedReader( new InputStreamReader(new FileInputStream(file),"UTF-16"));
          }catch(FileNotFoundException exc){
           erreur += "ERROR of opening of the file : "+fDestination;
          }
          /**
           * On parse le fichier ini et on copie les lignes dans le fichier temporaire
           */
          while ((ligne = lecteurAvecBuffer.readLine()) != null){
           if(ligne.length()>0){
            System.out.println("ligne avant "+ligne);
            String l = ligne;
            l= l.substring(0,1);
            if(!(l.equals(";"))){
             if(l.equals("[")){
              contenuFile = ligne;
              ligne = new String ( contenuFile.getBytes(), "UTF-16" );
              //System.out.println("Ligne = "+ligne);
              output.write(ligne); 
              output.newLine();
              String sessionTmp;
              sessionTmp = "["+session+"]";
              if(contenuFile.equals(sessionTmp)){
               s = session;
              }
             }else{
              String sp[];
              sp = ligne.split("=");
              sp[0]=sp[0].trim();
              key = key.trim();
              session = session.trim();
              if((sp[0].equals(key)) && (s.equals(session))){
               if(sp.length>1){
                sp[1] = sp[1].trim();
                value = value.trim();
                if(!(sp[1].equals(value))){
                 contenuFile =  key+" = "+value ;
                 ligne = contenuFile;
                ligne = new String ( contenuFile.getBytes(), "UTF-16" );
                 int j = 1;
                 while(j<sp.length){
                  String[] tmp;
                  tmp = sp[j].split("//");
                  if(tmp.length>1){
                   contenuFile += sp[1];
                  }
                  j++;
                 }
                }else{
                 /**
                  * Ligne modifiée
                  */
                 exist = 1;
                 contenuFile = ligne; 
                 ligne = new String ( contenuFile.getBytes(), "UTF-16" );
                }
                //System.out.println("Ligne = "+ligne);
               output.write(ligne); 
               output.newLine();
               }
              }else{
               contenuFile = ligne;
               ligne = new String ( contenuFile.getBytes(), "UTF-16" );
               //System.out.println("Ligne = "+ligne);
               output.write(ligne); 
               output.newLine();
              }
             }
            }else{
             contenuFile = ligne;
             ligne = new String ( contenuFile.getBytes(), "UTF-16" );
             //System.out.println("Ligne = "+ligne);
             output.write(ligne); 
             output.newLine();
            }
           }
          }
                /**
                 * ensuite flush envoie dans le fichier, ne pas oublier cette methode pour le BufferedWriter
                 */ 
                output.flush(); 
                output.close(); 
          lecteurAvecBuffer.close();
          /**
           * Si exist == 0 alors le fichier n'a pas été modifié
           */
          if(exist == 0){
         //  File tmp = new File("fichier_tmp.ini");
          // copier(fDestination,tmp);
           copier(fSource,fDestination);
           erreur += donnerHeure()+"   The file "+file+" was modified.\t";
           erreur += "["+session+"]\t";
           erreur += key+" = "+value+"\n";
          }
         // fSource.delete();
      }else{
          /**
           * Le fichier file est en lecture seule donc on ne peut pas modifier le fichier en cours
           */
       erreur += donnerHeure()+"   The file "+fDestination+" is read only \n";
      }
     }
    donc ce que je passe dans le fichier tmp c'est deja en unicode.
    je voudrais juste dire voila je te passe de l'unicode je veux que le fichier soit enregistrer en unicode.

  4. #4
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Ton code est un peu long...

    Est-ce que ma solution fonctionnne ou as-tu d'autres problèmes?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    je me suis di que je pouvais utiliser cette methode pour transformer un fichier texte en unicode.
    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
     
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    public class Converter{
     public static void toISO(String source, String destination){
          BufferedReader br = null;
          PrintWriter pw = null;
          try{
             //flux de lecture en UTF-8
             br = new BufferedReader(
                   new InputStreamReader(
                         new FileInputStream(source)));
             //flux d'écriture en ISO (valeur par défaut)
             pw = new PrintWriter(new FileOutputStream(destination));
             //pw = new PrinterWriter(destination,"UTF-16");
             String ligne;
             while((ligne = br.readLine())!=null){
                pw.println(ligne);
             }
          }catch(Exception e){e.printStackTrace();}   
          finally{
             try { pw.close(); } catch( Throwable e ) {}
             try { br.close(); } catch( Throwable e ) {} 
          }
       }
     public static void main(String[] args) {
      String source = "ini-inspector-tmp.ini";
      String destination = "test.ini";
      toISO(source,destination);
     }
    }


    mais bizarrement mon eclipse n'accepte pas que je fasse pw = new PrinterWriter(destination,"UTF-16"); alors que dans la doc http://java.sun.com/j2se/1.5.0/docs/api/
    elle est bien la. je me suis di que eclipse n'etait pas configurer pour la 1.5 mais a priori si j'ai dans properties du projet j'ai 5.0 partout.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    non ta solution ne fonctionne pas parce que en fait il m'enregistre bien le contenu mais il l'enregistre en codage ansi et moi je veux que ce soit en unicode

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    c bon ca marche avec ton code alors maintenant j'arrive pas a faire un retour a la ligne je pensais que j'avais juste a ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    output.write("\\u00a");
    mais en fait il passe pas a la ligne. ca me fais comme si c'etait des caracteres. Donc ca me donne [systeme]\u00acustomer = 0\u00apost_or_tvm
    est ce que tu vois si je fais une connerie.
    et un grand merci pour ton aide

  8. #8
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Pourquoi n'utilises-tu pas la méthode newLine() de BufferedWriter?

  9. #9
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    \u00a
    ne serait-ce pas \u000a le caractère unicode ?

  10. #10
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    +1 pour dazz_x

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    output.write("\\u00a");
    tu écris le string \u00a.

    Le code correct est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    output.write("\u000a");
    un seul back-slash pour "échapper" le u indiquant la survenu d'un code unicode.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    c'est bon c'est résolu alors pour la methode newLine ca n'existe pas pour un Writer mais le probleme c'est que pour lire mon .ini je prenais le bloc note et je ajoutais a chaque fois que je voulais qu'il aille a la ligne "\n" ou le caractere unicode qui correspond et je croyais que ca ne marchais pas mais en ouvrant mon .ini avec workpad ca marche donc c cool
    merci encore a tous le monde

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

Discussions similaires

  1. enregistrer deux fichier dans un seul fichier
    Par Bourak dans le forum Langage
    Réponses: 9
    Dernier message: 05/11/2005, 09h48
  2. Réponses: 3
    Dernier message: 01/10/2005, 21h26
  3. [FLASH MX2004] Enregistration du fichier .swf
    Par Ladzhar dans le forum Flash
    Réponses: 1
    Dernier message: 20/09/2005, 14h40
  4. [JSP] où s'enregistrent les fichiers ?
    Par Kyti dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 18/07/2005, 15h15
  5. enregistrement des fichiers tlb
    Par bidson dans le forum XMLRAD
    Réponses: 3
    Dernier message: 26/11/2003, 15h56

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