Problème de lecture de caractère spéciaux dans un fichier texte
Résolu/Fermé
ElexXVII
Messages postés
45
Date d'inscription
dimanche 10 août 2014
Statut
Membre
Dernière intervention
1 juillet 2017
-
Modifié par ElexXVII le 2/09/2015 à 22:26
ElexXVII Messages postés 45 Date d'inscription dimanche 10 août 2014 Statut Membre Dernière intervention 1 juillet 2017 - 3 sept. 2015 à 21:24
ElexXVII Messages postés 45 Date d'inscription dimanche 10 août 2014 Statut Membre Dernière intervention 1 juillet 2017 - 3 sept. 2015 à 21:24
A voir également:
- Java caractère spéciaux
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Caractère spéciaux mac clavier - Guide
- Caractère ascii - Guide
- Waptrick java football - Télécharger - Jeux vidéo
1 réponse
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
Modifié par KX le 2/09/2015 à 23:13
Modifié par KX le 2/09/2015 à 23:13
Bonjour,
Quand je testes ton code, je n'ai pas de problème particulier.
Quelques remarques au passage :
Ne fais pas de System.exit(0); il vaut mieux contrôler le code et le laisser à aller jusqu'à la fin du main.
Inutile de faire un flush sur un fichier. Les flush c'est plutôt pour des flux infinis comme des affichages où il faut régulièrement faire des pauses.
Ne modifies pas les variables systèmes System.setProperty(file.encoding") cela peut créer des effets de bords sur le reste du programme.
Évites les concaténations de String dans des boucles chaine += ligne, parce que cela va créer un nouvel objet String à chaque concaténation ce qui pollue la mémoire.
Et pour les exceptions, printStackTrace c'est mieux que println("Erreur"); mais uniquement si le programme peut continuer malgré l'exception. Or ici si tu as une exception, laisse là faire planter le programme.
En prenant en compte mes remarques et en simplifiant un peu ça donne ça (mais je n'ai toujours pas d'erreur en testant...)
La confiance n'exclut pas le contrôle
Quand je testes ton code, je n'ai pas de problème particulier.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class Test { public static void write(String outputFileName, String text) { try { FileWriter fw = new FileWriter(outputFileName, false); BufferedWriter output = new BufferedWriter(fw); output.write(text); output.flush(); output.close(); System.out.println("Fichier créé"); // System.exit(0); } catch (IOException ioe) { System.out.print("Erreur"); ioe.printStackTrace(); } } public static String read(String inputFileName) { String chaine = ""; try { System.setProperty("file.encoding", "UTF-8"); InputStream ips = new FileInputStream(inputFileName); InputStreamReader ipsr = new InputStreamReader(ips); BufferedReader br = new BufferedReader(ipsr); String ligne; while ((ligne = br.readLine()) != null) { chaine += ligne + "\n"; } br.close(); } catch (Exception e) { System.out.println("Erreur"); } return chaine; } public static void main(String[] args) { write("C:/test.txt","a%£^µ\r\n_`è|(}\r\n*-+"); System.out.println(read("C:/test.txt")); } }
Quelques remarques au passage :
Ne fais pas de System.exit(0); il vaut mieux contrôler le code et le laisser à aller jusqu'à la fin du main.
Inutile de faire un flush sur un fichier. Les flush c'est plutôt pour des flux infinis comme des affichages où il faut régulièrement faire des pauses.
Ne modifies pas les variables systèmes System.setProperty(file.encoding") cela peut créer des effets de bords sur le reste du programme.
Évites les concaténations de String dans des boucles chaine += ligne, parce que cela va créer un nouvel objet String à chaque concaténation ce qui pollue la mémoire.
Et pour les exceptions, printStackTrace c'est mieux que println("Erreur"); mais uniquement si le programme peut continuer malgré l'exception. Or ici si tu as une exception, laisse là faire planter le programme.
En prenant en compte mes remarques et en simplifiant un peu ça donne ça (mais je n'ai toujours pas d'erreur en testant...)
import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class Test { public static void write(String outputFileName, String text) throws IOException { FileWriter fw = new FileWriter(outputFileName); fw.write(text); fw.close(); } public static String read(String inputFileName) throws FileNotFoundException { StringBuilder builder = new StringBuilder(); Scanner sc = new Scanner(new File(inputFileName)); while (sc.hasNextLine()) builder.append(sc.nextLine()).append("\n"); sc.close(); return builder.toString(); } public static void main(String[] args) throws IOException { write("C:/test.txt", "a%£^µ\r\n_`è|(}\r\n*-+"); System.out.println(read("C:/test.txt")); } }
La confiance n'exclut pas le contrôle
Modifié par ElexXVII le 2/09/2015 à 23:28
Sache que je n'est aucune erreur de compilation ou autre, mon probleme ce situe dans la fonctionnalite du programme.
Quand j'importe les text codé dans le prgramme, il ne me renvoie pas les bons. Comme montrer dans la 2eme capture d'ecran, et c'est ça mon probleme ...
Au lieu de m'envoyer les caractere ressemblant a "fÉxf ...", il me renvoie des sorte de losange ....
2 sept. 2015 à 23:31
Donc le problème ne semble pas venir de la partie de code que tu as donné, en tout cas ce n'est pas reproductible chez moi... peut-être que cela vient plutôt du reste de ton code.
2 sept. 2015 à 23:33
2 sept. 2015 à 23:42
Moi je n'ai pas de saisie du genre "Importer de "Input.txt" (o/n)" j'ai juste les deux morceaux de codes qui font l'écriture et la lecture.
J'ai pris ces deux morceaux de code et je les ai mis dans une classe de Test et ça fonctionne très bien.
2 sept. 2015 à 23:56