2016-09-07 1 views
0

J'ai donc un programme qui recueille un tas de données et concatène en continu les données dans une chaîne avec un seul espace blanc entre chaque entrée. Au cours de ma routine de fermeture, j'imprime la chaîne dans un fichier txt en utilisant un éditeur tamponné. Environ 50% du temps, les données apparaissent comme des symboles (principalement) chinois. La VM fait-elle des trucs Unicode bizarres? Pourquoi cela se produit-il seulement parfois?Buffered Writer crée parfois des symboles plutôt que des chiffres

J'ai regardé autour d'autres forums et n'ai pas vu d'autres instances de ce problème. Aucun des autres majors CS que je connais ne comprend ce qui se passe.

EDIT: les données sont toutes des nombres entiers compris entre 0 et 1 365; MISE À JOUR: après d'autres recherches, j'ai trouvé this ce qui me fait penser à un PrintStream plutôt qu'à un BufferedWriter, est-ce que quelqu'un peut en parler? J'ai testé le PrintStream et je ne serai pas capable de le construire avec un FileWriter comme je le ferais pour un BufferedWriter, ce qui signifie que j'ai besoin de plus de recherches pour écrire sur mon txt. UPDATE: l'impression sur la console ne provoque pas l'apparition de cette erreur.

J'accepterai une réponse qui explique comment le Bloc-notes (le programme que j'utilise pour ouvrir le txt) affiche parfois des chiffres et parfois affiche des symboles.

Voici le code correspondant:

//fields 
private static BufferedWriter out; 
private File saveFile; 
String data; 
//inside constructor 
this.saveFile = new File("C:\\Users\\HPlaptop\\Desktop\\MouseData.txt"); 
       this.saveFile.delete(); 
       try{this.saveFile.createNewFile();} 
       catch (IOException e){System.out.println("File creation error");} 
try {out = new BufferedWriter(new FileWriter("C:\\Users\\HPlaptop\\Desktop\\MouseData.txt"));} 
       catch (IOException e) {System.out.println("IO Error");} 
       this.control.addWindowListener(new WindowAdapter() 
       { 
       public void windowClosing(WindowEvent e) 
        { //there is a method call here but the basics are below 
         out.write(data); 
        out.close(); 
         System.exit(0); 
        } 
       }); 

Voici un exemple d'ensemble de données imprimées correctement:

1365 767 1365 767 1365 767 1364 767 1353 756 1268 692 1114 604 980 488 812 334 744 283 694 244 593 150 473 81 328 13 207 0 124 0 115 0 102 0 99 6 107 13 132 20 173 32 187 31 190 25 194 20 201 17 215 14 221 10 224 7 224 7 224 7 226 6 226 6 226 6 226 6 226 6 226 6 226 6 

Cet ensemble de données a été prise quelques secondes plus tard et n'est pas ce que je veux

㐀ㄹ㈠㤰㐠㔸㈠㈱㐠㠶㈠㐱㐠㘲㈠㘰㌠㠷ㄠ㔹㌠㌳ㄠ㌹㈠㘹㈠㄰㈠㠷㈠㜳㈠㐶㈠㐷㈠㐶㈠㔷㈠㌶㈠㔵㈠㐵㈠㠰㈠㤴ㄠ㔲㈠㤴㐠‶㐲‹㌱㈠㘴〠㈠㘴〠㈠㘴〠㈠㜴〠㈠㠴〠㈠㠴〠㈠㜴㠠㈠㔴ㄠ‶㐲‵㤱㈠㔴ㄠ‹㐲‵㠱㈠㜴ㄠ‶㐲‹ㄱ㈠〵ㄠ‰㔲‰〱 
+0

Aussi bien qu'il soit environ 50% ce n'est pas tous les autres temps – Czarking

+1

Qu'est-ce qui vous fait penser que les données elles-mêmes ne sont pas des symboles chinois étranges? Je serais moins enclin à blâmer sur le BufferedWriter que les données – Stoud

+0

bon point que j'ai édité ma question; les données sont toutes des nombres entiers compris entre 0 et 1 356; Je n'ai pas inclus tout le code car il serait trop long. – Czarking

Répondre

1

Le BufferedWriter ne fait pas une erreur et le code est correct, sauf pour la redondance en utilisant

this.saveFile.delete(); 
try{this.saveFile.createNewFile();} 
       catch (IOException e){System.out.println("File creation error");} 

et

new FileWriter 

L'erreur dans la lecture des données se produit lorsque le fichier est ouvert . Le dépendant de quel programme ouvre les données différents résultats sont affichés en raison de la façon dont le logiciel lit les données. Le Bloc-notes affichait des symboles car il interprétait les nombres en ASCII. La console n'a pas essayé d'interpréter les données et a simplement affiché ce qui y était écrit. L'utilisation d'un programme qui n'essaie pas d'interpréter les nombres dans le fichier permettra aux données d'être visualisées correctement.

0

Comme vous n'avez pas fourni et donné l'exemple des données que vous écrivez dans le flux, vous êtes proba Bly expérience du buisson caché les faits phénomène.

+0

merci, édité voir ci-dessus, Bd9 – Czarking