Java BufferedReader считывает только две строки

#java #bufferedreader

#java #bufferedreader

Вопрос:

Итак, у меня есть эта функция Void, которая должна считывать целые числа из файла .txt, и она работает по большей части, за исключением того, что она читает только первые две строки. Я перепробовал все, что в моих силах, и, похоже, ничего не работает

 public static void load(Player p) {
       String line = "";
        String token = "";
        String token2 = "";
        String[] token3 = new String[3];
        boolean EndOfFile = false;
        BufferedReader characterfile = null;
        boolean File1 = false;

        try {
            characterfile = new BufferedReader(new FileReader("./cache/Player.txt"));
            File1 = true;
        } catch (FileNotFoundException fileex1) {
        }

        if (File1) {
            // new File ("./characters/" playerName ".txt");
        } else {
            System.out.println("character file not found.");
        }
        try {
            line = characterfile.readLine();
        } catch (IOException ioexception) {
            System.out.println(": error loading file.");
        }
        while (EndOfFile == false amp;amp; line != null) {
            line = line.trim();
            int spot = line.indexOf("=");
            if (spot > -1) {
                token = line.substring(0, spot);
                token = token.trim();
                token2 = line.substring(spot   1);
                token2 = token2.trim();
                token3 = token2.split("t");
                 if (token.equals("Difficulty")) {
                    Player.setDifficulty(Integer.parseInt(token2));
                }
                        else if (token.equals("Player Health")) {
                                //System.out.println(token2);
                            System.out.println("debug");
                                Player.setHealth(Integer.parseInt(token2));
                            }
                        else  if (token.equals("Player Strength")) {
                                //System.out.println(token2);
                                Player.setStrength(Integer.parseInt(token2));
                            }
                        try {
                            line = characterfile.readLine();
                        } catch (IOException ioexception1) {
                            System.out.println("sent");
                            EndOfFile = true;
                        }
                    }
                    try {
                        characterfile.close();
                    } catch (IOException ioexception) {
                    }
        }
        }
  

это мой метод сохранения, который функционирует по назначению.

 public void save(Player p) {
    BufferedWriter characterfile = null;
    try {
        characterfile = new BufferedWriter(new FileWriter("./cache/Player.txt"));
        characterfile.write("Player Strength = ");
        characterfile.write(Integer.toString(Player.getStrength()));
        characterfile.newLine();
        characterfile.write("Player Health = ");
        characterfile.write(Integer.toString(Player.getHealth()));
        characterfile.newLine();
        characterfile.write("Difficulty = ");
        characterfile.write(Integer.toString(Player.getDifficulty()));
        characterfile.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
  

это то, что мой Player.txt Выглядит как

 Player Strength = 0
Player Health = 0
Difficulty = 0
  

опять же, как я уже сказал, сила игрока и здоровье игрока будут считаны, но тогда токен даже не будет испытывать затруднений или полностью пропустит его, у меня совершенно нет идей.

Комментарии:

1. для начала никогда не проглатывайте исключения } catch (FileNotFoundException fileex1) { }

2. Я думаю, вы закрываете файл после прочтения второй строки. Но код очень трудно читать. Пожалуйста, отформатируйте их и отправьте повторно.

3. поместите эту characterfile.close(); строку вне while цикла.

Ответ №1:

Вызов to br.readLine() будет считывать только одну строку за раз.Вы можете выполнять цикл до тех пор, пока br.readLine() не вернетесь null .

 String line=null;
while((line=br.readLine())!=null){
//Do your stuff
}
  

Ответ №2:

Вы закрываете файл в цикле while.

переместите эти строки:

 try {
  characterfile.close();
} catch (IOException ioexception) {
}
  

добавьте `}’ перед строками и удалите одну после.

Комментарии:

1. И, конечно же, добавьте оператор log в catch- блок.

2. Это исправило это, я даже не заметил, что мой цикл закрыл файл, чувак, я чувствую себя глупо, большое тебе спасибо.

3. @user3404907 Если вы лучше отформатируете свой код, вы сможете лучше его видеть 😉

Ответ №3:

вы вызываете characterfile.close(); свой цикл. Это должно быть вне вашего цикла ( while (EndOfFile == false amp;amp; line != null) { ...} ). Первый цикл работает, но вы закрываете файл, во втором цикле вы получаете исключение IOException, потому что пытаетесь прочитать свой закрытый файл.