Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ma méthode écrit dans un fichier en Chinois !

Anonyme
    3 juin 2023 à 13:41:37

    Bonjour a tous !

    Voila j'ai fini mon dictionnaire et je me suis créer une petite méthode de sauvegarde en quelques minutes, mais voila résultat inattendue elle sauvegarde bien le dictionnaire mais en chinois !

    J'ai essayé plusieurs méthodes pour changer l'encodage, ou le spécifié mais rien y fait donc je viens vers vous pour conseil et aide !

    Voici la méthode en Question :

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    
    public class Fichier {
    
    	/*** Attributs ***/
    	
    	private BufferedReader lecteur;
    	private BufferedWriter writer;
    	private String chemin;
    	
    	/*** Constructeurs ***/
    	
    	public Fichier(String cheminFichier) throws IOException{
    		this.chemin = cheminFichier;
    	}
    	
    	/*** Getters et Setters ***/
    	
    	public BufferedReader getLecteur() {return lecteur;}
    	public void setLecteur() throws FileNotFoundException {this.lecteur = new BufferedReader(new FileReader(this.getChemin()));}
    	public BufferedWriter getWriter() {return this.writer;}
    	public void setWriter() throws IOException {this.writer = new BufferedWriter(new FileWriter(this.getChemin()));}
    	public String getChemin() {return chemin;}
    	public void setChemin(String chemin) {this.chemin = chemin;}
    
    	/*** Methodes ***/
    	
    	//charge le dictionnaire
    	public void RemplirDictionnaire(Dictionnaire dico, String chemin) throws IOException{
    		String ligne;
    		this.setChemin(chemin);
    		this.setLecteur();
    		while((ligne = this.getLecteur().readLine()) != null) {
    			String[] mots = ligne.split("\\|");
    			ArrayList<Object> motsList = new ArrayList<>();
    			motsList.addAll(Arrays.asList(mots));
    			dico.ajouterMot(motsList);
    		}
    	}
    	
    	//sauvegarde le dictionnaire en écrasant le précédent
    	public void SauvegarderDictionnaire(Dictionnaire dico) throws IOException {
    		ArrayList<String> data = dico.Save();
    		this.setChemin("./Ressources/SaveDico.txt");
    		this.setWriter();
    		for(String element : data) {
    			this.getWriter().write(element);
    		}
    	}
    	
    	//renvoie le contenu d'un fichier dans un arraylist<String>
    	public ArrayList<String> LireFichier(String chemin) throws IOException {
    		String ligne;
    		this.setChemin(chemin);
    		this.setLecteur();
    		ArrayList<String> fichier = new ArrayList<String>();
    		while((ligne = this.getLecteur().readLine()) != null) {
    			String[] mots = ligne.split(" ");
    			for(String str : mots) {
    				fichier.add(str);
    			}
    		}
    		return fichier;
    	}
    	
    	/*** Overrides ***/
    	
    }

    je vous ai mis la class au complet au cas ou cela vous aide mieux, si besoin je peut vous fournir le reste du code sinon il est disponible sur GitHub, Suivre ce liens : https://github.com/Norean/Dictionnaire/tree/main/Dictionnaire/src

    Voici le résultat du fichier en question :

    籼籼簀簀⸰簰⸰簰⸰簰⸰簰ぼぼぼぼぼ籼ぼぼぼぼ籼簰籼籼籼||ぼ

    Merci a tous !

    • Partager sur Facebook
    • Partager sur Twitter
      15 juin 2023 à 13:53:42

      Salut, j'ai un peu regardé, j'ai rien vu de spécial mis a part que c'est du japonais et pas du chinois, à voir si ca a un impact pour l'encodage. :/
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        22 juin 2023 à 11:42:30

        Salut Tiffado,

        Tout d'abord merci d'avoir jeter un oeil, et effectivement c'est bien du japonnais, mais pour le coup cela n'as pas vraiment d'impact sur l'encodage.

        Cela vas bientot faire 1 mois que je suis bloquer la dessus je vais surement devoir repartir de zero pour cette methode.

        En tout cas merci d'avoir jeter un oeil.

        • Partager sur Facebook
        • Partager sur Twitter
          23 juin 2023 à 8:15:34

          Je pense que tu peux commencer par virer tous ces getters/setters qui n'ont aucune raison d'être publics, et utiliser directement les champs déclarés là où il y en a besoin. Tu y verras plus clair, condition indispensable pour s'y retrouver.

          Déclarer le lecteur dans la méthode qui fait la lecture, le writer dans celle pour l'ecriture.

          Aussi : faire afficher le contenu des éléments de data, pour contrôle visuel pendant l'écriture dans le fichier.

          Et encore : utiliser un PrintWriter pour envoyer du texte.

          -
          Edité par michelbillaud 23 juin 2023 à 9:29:06

          • Partager sur Facebook
          • Partager sur Twitter
            23 juin 2023 à 10:00:06

            Egalement faire un choix linguistique dans ce micmac serait appréciable, soit le francais, soit l'anglais mais pas les deux (getLecteur getWriter)

            Comme dit precedemment, les get/set c'est le mal absolu, ils brisent l'encapsulation ce qui conduit a des effets de bord(n'importe quoi peut changer l'etat de l'objet et le rendre soit incoherent, soit avec des valeurs inattendues), des exceptions(les null pointers sont un grand classique la ou on peut mettre n'importe quoi n'importe comment), augmentent la complexite de la classe(faut initialiser un tas de trucs avant de pouvoir l'utiliser, c'est penible et propice aux erreurs) et rend la gestion du cycle de vie des reader/writer floue, qui a la responsabilite de les fermer, rouvrir au besoin?

            La regle est que les champs non 'final' doivent etre l'exception, et etre soit uniquement destine a usage interne a la classe, soit etre une representation de l'etat de l'objet ou encore un resultat de calcul qui n'ont aucune incidence sur l'objet lui meme.

            Autre point la conception:

            Ta classe est bancale, pas seulement pour les get set mais aussi parce qu'elle est liee au dico, dont doit c'est un fichier dico et ca devrait etre represente dans le nom, soit c'est un fichier tout court, et aucune allusion au dico dedans(et meme, ce n'est pas vraiment un fichier tout court, c'est un fichier texte), egalement c'est ta classe fichier qui connait le separator de ton dico '|' ? ca devrait etre la responsabilite de dico et ici c'est mal gere(| en ecriture et ' ' en lecture), aussi, le chemin peut venir soit du constructeur, du setter, etre hadcoded, venir de la fonction lire ou encore de la fonction remplir, 5 manieres de faire pour une valeur qui devrait etre unique, ca sent pas bon.

            Enfin tu ne geres pas tes exception, tu throws des IO n'importe comment(dans le constructeur?) ce qui fait que si une seule ligne de ton fichier echoue, c'est tout le fichier qui est impacte(et on ne sait pas quelle ligne pose probleme).

            Tout ca mis ensemble peut donner un nombre de situation indefinie tellement large que l'encoding louche n'est pas tres etonnant.

            Pour ton probleme specifiquement, filewriter n'est pas le meilleur choix.

            Tu dois revoir ta classe en profondeur et separer les responsabilites.

            -
            Edité par P.X.L 23 juin 2023 à 10:04:22

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              23 juin 2023 à 10:38:16

              Woaa !!!!

              j'ai rien compris ! vous me parler de notion tellement lointaine et floue pour moi que j'ai ne serais ce que tu mal a vous relire.

              Vous me parler aussi de problème de conception, beaucoup de problème de conception, a tel point que j'en viens a penser que je n'ai fait que de la merde.

              Enfin comme d'habitude, je me demande encore une fois pourquoi je viens sur ce forum de merde.

              Quand je viens poser une question a chaque fois je n'ai que des reproches, pas de réponse, et aucun conseil. Franchement au lieu de répondre ce genre de merde vous feriez mieux de vous contenter de lire les post.

              C'est dingue ca !

              Aller cette fois c'est la bonne, je dégage ce compte. Et puis soyons un peu honnête la fatigue me fais venir sur ce forum mais j'ai parfaitement le niveau pour le débugger moi même ce code.

              Tchao les nazes et continuer bien a vous prendre pour des dieux. vous valez pas un copeck !

              • Partager sur Facebook
              • Partager sur Twitter
                23 juin 2023 à 11:01:16

                Bonjour,

                Tu viens ici en énonçant un problème que tu as, et le soucis ne se voit pas au 1er coup d’œil.

                Ce genre de soucis peut venir de pas mal d'endroits, et parfois (souvent ?) cela peut venir d'un effet de bord à cause d'un simple code peu propre ou en respectant pas les bonnes pratiques (le code c'est susceptible).

                PXL et Michel ne sont donc donné comme mission de te lister les choses qui ne vont pas dans ton code, afin d'avoir un code nickel qui respecte les bonnes pratiques, ce qui est bien, à la fois pour toi et ton apprentissage, et aussi pour les autres le jour où quelqu'un reprendra ton projet (si ce n'est pas ce projet la, ca en sera un autre).

                Et une fois leurs conseils appliqués, il y a de fortes chances que tes soucis de résolvent. C'est ce qu'ils t'ont dit. 

                Et honnêtement, ce je vois pas ce qu'ils ont dit de mal, ils ont certes utilisés des termes techniques, mais qui n'ont rien de fou (getter ? setter ? encapsulation ? final ? constructeur ? publics ? privés ? )

                Ce sont des termes qui n'ont rien d'exceptionnels, et franchement, c'est pas du luxe d'apprendre à les connaitre. Normalement après le suivis d'un cours, ce sont des termes que tu devrais avoir entendu voir maîtrisé pour la plupart. S'il y a des choses que tu comprends pas, aucun soucis, c'est normal on est tous passé par la, faut pas hésiter à te renseigner ou poser des questions.

                Fin bref, je vois que tu poses une question, des gens te répondent en te lisant ce qui va pas dans ton code et qui pourraient être la cause de ton problème d'encodage, et rajoute quelques conseils en bonus, et tu prends la mouche et nous insulte.

                Peut être que la formulation te déplaît, mais lister les choses qui ne vont pas (avec au passage des indications sur quoi faire a la place), ce sont des conseils et non pas des reproches. Puis bon, si tu es si fort que ça, pourquoi aurais tu besoin de conseils ?

                Le seul reproche à te faire, c'est pas sur ton code, c'est sur ton comportement.

                C'est un comportement franchement limite vis à vis des gens qui ont pris du temps à te proposer une réponse après avoir analyser ton code.

                Bref, amuse toi bien.

                • Partager sur Facebook
                • Partager sur Twitter
                  23 juin 2023 à 19:28:54

                  NimesRPG a écrit:

                  Enfin comme d'habitude, je me demande encore une fois pourquoi je viens sur ce forum de merde.

                  ....

                  Et puis soyons un peu honnête la fatigue me fais venir sur ce forum mais j'ai parfaitement le niveau pour le débugger moi même ce code.

                  Problème de cohérence détecté !

                  Aussi avec :

                  > ça fait un mois que je suis bloqué dessus

                  Qu'est-ce que ça serait sans avoir le niveau.

                  Sinon - le monsieur ne le lira peut être pas après son époustouflante sortie théâtrale- mais ça vient peut être de la facon de regarder le contenu du fichier. Pour peu que ca soit un traitement de textes qui a décidé que c'était un encodage chinois par défaut...



                  -
                  Edité par michelbillaud 24 juin 2023 à 7:48:32

                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 juin 2023 à 12:05:45

                    michelbillaud a écrit:

                    > ça fait un mois que je suis bloqué dessus

                    Qu'est-ce que ça serait sans avoir le niveau.

                    Non c'est normal, ca prend du temps d'apprendre le japonais.



                    • Partager sur Facebook
                    • Partager sur Twitter

                    Ma méthode écrit dans un fichier en Chinois !

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown