簡體   English   中英

Java BufferedReader僅讀取兩行

[英]Java BufferedReader reads two lines only

所以我有這個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 && 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

再次,正如我說的,將讀取“玩家力量”和“玩家健康”,但是令牌甚至不會變得困難,或者將其完全跳過,我完全沒有主意。

調用br.readLine()只會讀取一行。您可以循環播放,直到br.readLine()不返回null為止。

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

您在while循環中關閉文件。

移動這些行:

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

在各行之前添加一個“}”,並在其后刪除一個。

您調用characterfile.close(); 在你的循環中。 這應該在循環之外( while (EndOfFile == false && line != null) { ...} )。 第一個循環有效,但是您關閉了文件,第二個循環則由於嘗試讀取關閉的文件而得到IOException。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM