BufferedWriter ведет себя странно

Я пытаюсь создать игру с работающим механизмом рекордов и использую java.io.BufferedWriter для записи в файл рекордов. У меня нет шифрования на рекордах, и я использую Slick2D и LWJGL для рендеринга и пользовательского ввода. Программа выполняет этот код:

FileWriter fstream = new FileWriter("res/gabjaphou.txt");

BufferedWriter writer = new BufferedWriter(fstream);

writer.write(score); // score is an int value

writer.close(); // gotta save m'resources! lol

Я открываю текстовый файл, сгенерированный этим, и все, что он читает, это вопросительный знак. Я не знаю, почему это происходит, и я использовал другой код из другого проекта, который я делал, и у меня не было проблем с этим... Кто-нибудь знает, почему? Это действительно раздражает! :С


person SuperCheezGi    schedule 09.08.2012    source источник
comment
Каково возможное значение score?   -  person Nivas    schedule 09.08.2012
comment
Это действительно раздражает! :C - да, ошибки в вашем коде могут быть очень раздражающими :-)   -  person Stephen C    schedule 09.08.2012


Ответы (3)


BufferedWriter.write(int) предназначен для записи одного символа, а не целого числа.

public void write(int c)
throws IOException

Записывает один символ.

Переопределения: запись в классе Writer
Параметры: c - int указание символа для записи
Выбросы: IOException - Если возникает ошибка ввода/вывода

Пытаться

writer.write(String.valueOf(score));  
person Nivas    schedule 09.08.2012

Пожалуйста, используйте writer.write(String.valueOf(score));, иначе он запишет score как персонаж. См. документацию:

Записывает один символ. Записываемый символ содержится в 16 младших битах заданного целочисленного значения; 16 старших бит игнорируются.

Вы хотите использовать Writer.write(String); преобразовать score в String, используя String.valueOf или Integer.toString.

writer.write(String.valueOf(score));
person obataku    schedule 09.08.2012
comment
(см. комментарии от Нив ниже) - person Teh Hippo; 09.08.2012
comment
@TehHippo Сначала я прокомментировал вопрос, а затем разместил ответ здесь перед Нивасом. - person obataku; 09.08.2012
comment
@SuperCheezGi, поскольку вы выглядите здесь новее, не забудьте отметить ответ принятым что больше всего помогло в решении проблемы. - person obataku; 15.08.2012

BufferedWriter пытается записать в файл серию байтов, а не чисел. Число все еще является символом.

Рассмотрите возможность использования вместо этого FileWriter и чего-то такого простого, как: fileWriter.write(Integer.toString(score)) Write принимает здесь строку, но вывод должен быть таким же.

person Teh Hippo    schedule 09.08.2012
comment
Вам нужно преобразовать score в String, иначе вы все равно будете звонить write(int). - person obataku; 09.08.2012
comment
Правильный; в этом случае Java не просто справится с этим. Исправил и отметил, спасибо ;) - person Teh Hippo; 09.08.2012