Установка числа в файле на 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тогда вам, вероятно, придется каждый раз закрывать и открывать файл и использовать конструктор, который позволяет указать, что вы НЕ хотите, чтобы он добавлял дополнительные данные.

Другие вопросы по тегам