Partage
  • Partager sur Facebook
  • Partager sur Twitter

Filewriter qui écrit en "chinois"

2 mai 2021 à 22:13:02

Bonjour à tous,

Je commence tranquillement la programmation en java et je teste actuellement la lecture et l'écriture dans des fichiers.

J'ai donc écrit ce code qui créer un fichier et qui y écrit ce que je lui dis...

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class GestionRepertoire {
    public static void main(String[] args){
        try{
            //Créer l'objet fichier avec le chemin et le nom
            File file = new File("C:\\Users\\victo\\Desktop\\Programmation\\Java\\GestionRepertoire\\test.txt");
            
            //créer le fichier si il n'existe pas encore
            if(file.createNewFile()){
                System.out.println("Fichier créer !");
            }
            else{
                System.out.println("Le fichier extiste déja !");
            }
            //Recuperer saisie clavier
            Scanner sc = new Scanner(System.in);

            System.out.println("Entrez un texte :");
            String str = sc.nextLine();
            sc.close();

            //Ecrire dans le fichier
            FileWriter writer = new FileWriter(file.getAbsolutePath(), StandardCharsets.ISO_8859_1, true);
            writer.write(str + "\n");
            writer.close();

        }catch (IOException e) {
        e.printStackTrace();
        }
    }
}

Mon problème et que ce que je retrouve dans mon fichier ressemble à des caractères asiatique :

Je ne comprend pas d'où peut venir ce problème... Si vous pouviez m'éclairer de vos lumières ce serait très sympa !

En vous remerciant,

MagretsDeCanard.

-
Edité par MagretsDeCanard 2 mai 2021 à 23:20:03

  • Partager sur Facebook
  • Partager sur Twitter
2 mai 2021 à 22:56:57

Salut,

  • l'image ne fonctionne pas. Donc impossible de voir le contenu du fichier
  • peux-tu donner le texte que tu rentres ligne 22.

-
Edité par rybla 2 mai 2021 à 23:03:11

  • Partager sur Facebook
  • Partager sur Twitter
2 mai 2021 à 23:19:38

Bonsoir ! Merci de votre réponse !

Désolé je n'avais pas fait attention pour l'image !

J'ai édité l'image normalement c'est bon !

Et pour le texte peut importe ce que je rentre comme texte le résultat et le même !

  • Partager sur Facebook
  • Partager sur Twitter
3 mai 2021 à 16:12:28

Faut pas se compliquer avec un FileWriter, quand un PrintStream (comme System.out) fait l'affaire (depuis java 1.5 - 2004....)

Utilisation de plusieurs encodages :

package sorties;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

public class Sorties {

  
    public static void main(String[] args) throws FileNotFoundException, IOException {
        String texte = "Un texte accentué à afficher";
        
        sauver(texte, "/tmp/texte-utf8.txt", "UTF-8");
        sauver(texte, "/tmp/texte-latin1.txt", "ISO-8859-1");
        System.out.println("Test terminé brillamment.");
       
    }

    private static void sauver(String texte, String chemin, String encodage) 
            throws FileNotFoundException, UnsupportedEncodingException {
        Charset charset = Charset.forName(encodage);
        PrintStream f = new PrintStream(chemin, encodage);
        f.println(texte);
        f.close();
    }
    
}


Résultats :

$ file /tmp/texte-*
/tmp/texte-latin1.txt: ISO-8859 text
/tmp/texte-utf8.txt:   UTF-8 Unicode text


Doc https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html#PrintStream-java.lang.String-java.lang.String-

public PrintStream(String fileName,
                   String csn)
            throws FileNotFoundException,
                   UnsupportedEncodingException
Creates a new print stream, without automatic line flushing, with the specified file name and charset. This convenience constructor creates the necessary intermediate OutputStreamWriter, which will encode characters using the provided charset.

-
Edité par michelbillaud 3 mai 2021 à 16:17:24

  • Partager sur Facebook
  • Partager sur Twitter
3 mai 2021 à 20:37:13

Super ! Merci pour le coup de main ! :D

Mais mon problème maintenant et que à chaque fois que j'écris du texte dans le fichier il écrase le texte précédemment écrit... Je n'arrive pas à aller à la ligne :'(

 J'ai essayé avec cette méthode, mais je n'arrive pas à mettre en place le OutputStream:

Si un autre coup de main pouvez m'être donné :p

Je vous remercie déjà pour l'aide apporté !

-
Edité par MagretsDeCanard 3 mai 2021 à 21:30:00

  • Partager sur Facebook
  • Partager sur Twitter
3 mai 2021 à 20:59:39

En Java 8

        Path path = Paths.get("src/main/resources/shakespeare.txt");
        try (BufferedWriter writer = Files.newBufferedWriter(path, Charset.forName("UTF-8"))) {
            writer.write("To be, or not to be. That is the question.");
        } catch (IOException ex) {
            ex.printStackTrace();
        }

J(ai pas de character chinois avec ta premier solution.

  • Partager sur Facebook
  • Partager sur Twitter
4 mai 2021 à 14:38:11

MagretsDeCanard a écrit:

Super ! Merci pour le coup de main ! :D

Mais mon problème maintenant et que à chaque fois que j'écris du texte dans le fichier il écrase le texte précédemment écrit... Je n'arrive pas à aller à la ligne :'(

 J'ai essayé avec cette méthode, mais je n'arrive pas à mettre en place le OutputStream:

Si un autre coup de main pouvez m'être donné :p

Je vous remercie déjà pour l'aide apporté !

-
Edité par MagretsDeCanard il y a environ 17 heures


Si c'est pour étendre (append) le fichier, on peut faire comme ça (il faudrait passer de Java 8 à Java 11, qui est la version actuelle "long term supporté)

  private static void etendreFichier(String texte, String chemin, String encodage) throws IOException {
        var file = new FileOutputStream(chemin, true);
        var out = new PrintStream(file, false, encodage);
        out.println(texte);
        out.close();
    }



  • Partager sur Facebook
  • Partager sur Twitter