0

我正在为我的游戏开发一个简单的保存系统,它涉及三种方法,初始化加载和保存。

这是我第一次尝试读取和写入文件,所以我不确定我是否正确执行此操作,因此我请求帮助。

我想做这个:

游戏开始时,会调用 init。如果文件 saves 不存在,则创建它,如果存在,则调用 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) {

    }
}

我在想也许有一个数组,将文本文件中的字符串解析为整数,将其放入数组中,然后让变量等于数组中的值。

4

2 回答 2

1

好像你的文件是一个 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"));
于 2013-08-11T15:25:54.343 回答
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();
    }
}

Note the use of the try-with-resources statement here, which makes sure the reader is closed, whatever happens in the method. You should also use this construct when writing to the file.

于 2013-08-11T15:26:08.773 回答