2016-12-11 2 views
0

J'ai un petit problème dans l'écriture de fichiers en Java. J'ai créé un nouveau fichier en utilisant File f = new File(path); et un BufferedWriter qui écrit dans ce fichier. Et un int i = 1; Maintenant, l'écrivain tamponné (écrivain de fichier) doit écrire l'int i dans le fichier mais il ne le fait pas, il écrit CUBES! Comme celui-ci ■. Et lorsque le scanner lit le fichier, il lit ce cube, et une erreur se produit,Java - Buffered Writer écrit des cubes Non int

Voici un exemple:

int i = 1; 
File f = new File(path); 
BufferedWriter bw = new BufferedWriter(new FileWriter(f)); 
bw.write(i); 

int b = 0; 
Scanner s = new Scanner(new FileReader(f)); 
b = s.nextInt(); 
//end 

Mais pour une raison quelconque, il écrit un cube ■ pas numéro 1, et c'est pourquoi scanner ne peux pas le lire.

Des idées pourquoi cela se passe-t-il? -Merci pour aider. ■

+1

Avez-vous pris la peine de * lire * le fichier javadoc de ['BufferedWriter.write (int c)'] (https://docs.oracle.com/javase/8/docs/api/java/io/BufferedWriter. html # write-int-) méthode que vous appelez? Il dit: * Écrit un seul caractère. * Il n'écrit pas le nombre en utilisant base-10 décimales. Pour cela, vous devez utiliser un 'PrintWriter' et appeler [' print (int i) '] (https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html#print- int-). – Andreas

+0

@Andreas Question bonus: Si vous vouliez réellement écrire un numéro de base 10, quel code de caractères utiliseriez-vous (pas que je le recommande)? –

Répondre

1

La méthode d'écriture n'écrit pas la valeur interger comme texte mais l'entier est interprété comme un code de caractère.

Vous devriez mieux utiliser un PrintWriter, ce qui est plus confortable. Avec elle, vous pouvez utiliser les mêmes méthodes d'impression que dans System.out.

PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(f))); 
writer.print(i); 

Vous devez également savoir, que vous utilisez implicitement la plate-forme encodage par défaut, qui est Cp1252 (Windows ANSI) pour Windows et généralement UTF-8 pour Linux. Pour éviter tout comportement inattendu, il est recommandé de toujours définir explicitement le codage de caractères. Alors vous finissez avec:

PrintWriter writer = new PrintWriter(new BufferedWriter(
    new OutputStreamWriter(new FileOutputStream(f), "UTF-8"))); 

Ceci est un peu plus complexe mais l'encodage de fichier est sous votre contrôle.

+0

Oui, c'est ce dont j'ai besoin. Cela fonctionne, génial. Puis-je savoir pourquoi j'ai eu un vote négatif? Et merci d'aider !!! –