簡體   English   中英

如何使用BufferedWriter讀取某一行

[英]How to read a certain line with a BufferedWriter

我正在為我的游戲開發一個簡單的保存系統,它涉及三種方法,init加載和保存。

這是我第一次嘗試讀取和寫入文件,因此我不確定我是否正確地執行此操作,因此我請求幫助。

我想做這個:

游戲開始時,會調用init。 如果文件保存不存在,則創建它,如果存在,則調用load。

稍后在游戲中,將調用save,並且變量將逐行寫入文件(在此示例中我使用了兩個。)

但是,我堅持加載功能。 我不知道過去的重點是什么。 這就是為什么我要問,是否可以從文件中選擇某一行,並將變量更改為該特定行。

這是我的代碼,就像我說的,我不知道我是否正確地這樣做,所以請幫助。

private File saves = new File("saves.txt");

private void init(){
    PrintWriter pw = null;

    if(!saves.exists()){
        try {
            pw = new PrintWriter(new File("saves.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }else{
        try {
            load();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public void save(){
    PrintWriter pw = null;

    try {
        pw = new PrintWriter(new FileOutputStream(new File("saves.txt"), true));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    pw.println(player.coinBank);
    pw.println(player.ammo);

    pw.close();
}

public void load() throws IOException{
    BufferedReader br = new BufferedReader(new FileReader(saves));
    String line;
    while ((line = br.readLine()) != null) {

    }
}

我想可能有一個數組,將文本文件中的字符串解析為整數,將其放入數組,然后使變量等於數組中的值。

好像你的文件是key = value結構,我建議你在java中使用Properties對象。 這是一個很好的例子

您的文件將如下所示:

player.coinBank=123
player.ammo=456

要保存:

Properties prop = new Properties();
prop.setProperty("player.coinBank", player.getCoinBank());
prop.setProperty("player.ammo", player.getAmmo());
//save properties to project root folder
prop.store(new FileOutputStream("player.properties"), null);

然后你會像這樣加載它:

Properties prop = new Properties();
prop.load(new FileInputStream("player.properties"));

//get the property value and print it out
System.out.println(prop.getProperty("player.coinBank"));
System.out.println(prop.getProperty("player.ammo"));

閱讀和寫作幾乎是對稱的。

你正在寫player.coinBank作為文件的第一行, player.ammo作為第二行。 因此,在閱讀時,您應該閱讀第一行並將其分配給player.coinBank ,然后讀取第二行並將其分配給player.ammo

public void load() throws IOException{
    try (BufferedReader br = new BufferedReader(new FileReader(saves))) {
        player.coinBank = br.readLine();
        player.ammo = br.readLine();
    }
}

請注意這里使用try-with-resources語句 ,這樣可以確保讀者關閉,無論方法發生什么。 在寫入文件時,您還應該使用此構造。

暫無
暫無

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

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