#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, потому что пытаетесь прочитать свой закрытый файл.