如何使用BufferedWriter读取某一行

时间:2013-08-11 15:13:08

标签: java bufferedreader printwriter

我正在为我的游戏开发一个简单的保存系统,它涉及三种方法,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) {

    }
}

我在考虑可能有一个数组,将文本文件中的字符串解析为整数,将其放入数组中,然后使变量等于数组中的值。

2 个答案:

答案 0 :(得分:1)

好像你的文件是key = value结构,我建议你在java中使用Properties对象。 这是一个很好的example

您的文件将如下所示:

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"));

答案 1 :(得分:1)

阅读和写作非常对称。

您将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 statement,这样可以确保读者关闭,无论方法发生什么。在写入文件时,您还应该使用此构造。