Установка числа в файле на 0 при нажатии кнопки J
В стартовом меню для моей игры я не хочу, чтобы при нажатии кнопки "Продолжить" вы получали счет, который вы получили в прошлый раз. Я уже исправил код, который сохраняет счет, и код, который загружает счет, чтобы не было проблем с кнопкой продолжения.
Но с кнопкой "Новая игра" у меня возникли некоторые трудности. Когда эта кнопка нажата, мне нужно создать файл, в котором будет сброшен счет (установите число внутри него равным 0 вместо последней оценки). Я пытался иметь этот код внутри ActionListener
для кнопки, но она не устанавливает текст в файле.dat на 0, но добавляет 0 в конец.
try{
String zero = "0";
byte[] reset = zero.getBytes();
player.getFile().write(reset);
}catch (IOException ex){
}
Я также пытался player.setScore("0");
который я использую, чтобы добавить 10 очков каждый раз, когда враг умирает, но тогда он все равно получит счет из файла.dat.
Это два метода внутри класса проигрывателя, которые управляют загрузкой и сохранением файла.
public void save(){
try{
getScore = new File("Score.dat");
scoreFile = new FileOutputStream(getScore);
byte[] saveScore = score.getBytes();
scoreFile.write(saveScore);
}catch(FileNotFoundException ex){
}catch(IOException ex){
}
}
public void load(){
try{
br = new BufferedReader(new FileReader("Score.dat"));
score = br.readLine();
}catch (FileNotFoundException ex){
}catch(IOException ex){
}
}
Я также пытался запустить только load()
метод, если я нажимаю кнопку "Продолжить", а не кнопку "Новая игра", но я получаю java.lang.NullPointerException
ошибка.
2 ответа
Ваш код скрывает все соответствующие исключения, что очень затруднит понимание происходящего - поместите что-то вроде ex.printStackTrace();
в блоках catch, чтобы вы могли видеть, генерируются ли исключения. Я полагаю, что в вашем случае байты не записываются, потому что вы не закрываете и не очищаете поток.
Несмотря на это, вы, вероятно, захотите использовать вместо файла что-то вроде PrintWriter вместо записи сырых байтов:
PrintWriter writer = new PrintWriter(new File("file.txt"));
writer.println("0");
writer.close();
Если getFile()
возвращает FileWriter
тогда вам, вероятно, придется каждый раз закрывать и открывать файл и использовать конструктор, который позволяет указать, что вы НЕ хотите, чтобы он добавлял дополнительные данные.