我正在为我的游戏开发一个简单的保存系统,它涉及三种方法,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) {
}
}
我在考虑可能有一个数组,将文本文件中的字符串解析为整数,将其放入数组中,然后使变量等于数组中的值。
答案 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,这样可以确保读者关闭,无论方法发生什么。在写入文件时,您还应该使用此构造。