2015-12-29 1 views
1

J'essaie d'écrire des entiers dans un fichier texte en ne saisissant qu'une seule valeur par ligne, j'ai donc utilisé BufferedWriter.Ecriture d'un fichier en texte avec BufferedWriter (Ecrit quelque chose d'étrange) Java

try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
          new FileOutputStream("filename.txt"), "utf-8"))) { 
    writer.write(board.Player1.money);    
    writer.newLine(); 
    //Continues to do this for 4 players. 
    writer.newLine(); 
    writer.write(board.Player1.position); 
    writer.newLine(); 
    //Continues to do this for 4 players. 
} 

Ce que je m'attendais à voir était des entiers dans mon fichier texte. Et des valeurs comme board.Player1.money sont correctes car elles fonctionnent pour les autres parties du code. Donc je m'attends à voir une valeur comme 300 mais je vois les lignes suivantes dans un fichier texte.

Ǵ 
ಀ 
ಀ 
ಀ 

Pourquoi est-ce? Write (int c) avec nombre attend un caractère.

+0

, vous pouvez également utiliser StandardCharsets qui définit constantes pour 'Charset' incluant' UTF_8'. 'StandardCharsets.UTF_8' –

Répondre

1

La méthode write(...) du BufferedWriter est surchargé.

Par exemple: il y a la méthode void write(String arg) qui écrit la chaîne donnée au fichier et il est void write(int arg) qui convertit le nombre entier donné à un caractère et écrit ensuite le caractère du fichier.

Pour résoudre votre propblem vous devrez changer

writer.write(board.Player1.position); 

à

writer.write(Integer.toString(board.Player1.position)); 
+0

Cette solution est ok, mais j'ai une question.Quand je l'enregistre en tant que chaîne, il écrira encore une valeur entière (dans la vraie vie) au fichier.Alors quand j'essaie de le lire, puis-je le mettre directement dans un tableau entier ou je devrais utiliser Integer.parseInt après avoir lu le fichier? – Juwan

+0

Quand vous le relirez, vous devrez utiliser une méthode 'readLine()'. La chaîne résultante devra être analysée en Integer en utilisant 'Integer.parseInt (...)'! – ParkerHalo

1

Considérons en utilisant écriture (String s, int off, int len), ou d'une enveloppe comme PrintWriter

+0

Cette solution semble ok si quelqu'un a le même problème, ils peuvent l'utiliser, mais je veux seulement enregistrer une valeur int dans chaque ligne.Pour mon but, je pense que l'écriture Integer.toString est mieux, mais cette réponse est également valide. – Juwan

2

Une autre façon de le faire est la suivante:

writer.write(board.Player1.money+""); 
+0

J'écrivais cela en même temps que vous (swh) .. Mais aussi dans cette situation, nous devrions utiliser Integer.parseInt.J'ai testé cela et il s'est comporté de manière correcte – Juwan