2015-05-31 3 views
0

Я создал игру, которая сохраняет ваш высокий балл в текстовом файле с именем highscores.txt. Когда я открываю игру, отображается правильный высокий балл. Но когда я открываю текстовый файл, он всегда пуст. Почему это? Вот мой код для написания и чтения текстового файла.Почему мой текстовый файл всегда пуст?

FileInputStream fin = new FileInputStream("highscores.txt"); 
DataInputStream din = new DataInputStream(fin); 

highScore = din.readInt(); 
highSScore.setText("High Score: " + highScore); 
din.close(); 

FileOutputStream fos = new FileOutputStream("highscores.txt"); 
DataOutputStream dos = new DataOutputStream(fos); 

dos.writeInt(highScore); 
dos.close(); 
+5

Поскольку вы открываете файл, содержащий нетекст в текстовом редакторе? – immibis

+0

@immibis Это может быть хорошим ответом. – Sinkingpoint

+0

Хороший улов. OP, если вы находитесь в системе Unix, попробуйте «xxd highscores.txt», посмотрите, получаете ли вы текст или двоичный файл. –

ответ

4

DataOutputStream.writeInt не записывает целое число как текст; он записывает «сырое» или «двоичное» целое число, состоящее из 4 байтов. Если вы попытаетесь интерпретировать их как текст (например, просмотрев их в текстовом редакторе), вы получите мусор, потому что это не текст.

Например, если ваш счет 100, writeInt напишет 0 байт, 0 байт, 0 байт и 100 байт (в указанном порядке). 0 - недопустимый символ (при интерпретации текста), а 100 - буква «d».

Если вы хотите, чтобы написать текстовый файл, вы можете использовать Scanner для разбора (чтение) и PrintWriter для письма - что-то вроде этого:

// for reading 
FileReader fin = new FileReader("highscores.txt"); 
Scanner sc = new Scanner(fin); 

highScore = din.nextInt(); 
highScore.setText("High Score: " + highScore); 
sc.close(); 

// for writing 
FileWriter fos = new FileWriter("highscores.txt"); 
PrintWriter pw = new PrintWriter(fos); 
pw.println(highScore); 
pw.close(); 

(конечно, есть много других способов, которые можно сделать this)

+0

Спасибо за помощь. Я попробую этот метод! –