我正在尝试创建一个将新数据写入保存文件的程序。该文件有三个“槽”,即三个由分隔符分隔的字符串。主程序以slot为参数调用saver程序,saver程序打开文件,将每个slot中已有的String读入局部变量,用新的String替换给定slot对应的String,覆盖文件与新插槽。这应该导致只更新给定的插槽,而其他两个保持与以前相同。
主程序连续调用saver 3 次,每个slot 调用一次。这应该导致保存文件如下所示(其中 # 是分隔符):
第一次通话前:#EMPTY#EMPTY#EMPTY
第一次通话后:#NewString#EMPTY#EMPTY
第二次通话后:#NewString#NewString#EMPTY
第三次通话后:#NewString#NewString#NewString
.
取而代之的是:
第一次通话前:#EMPTY#EMPTY#EMPTY
第一次通话后:#NewString#EMPTY#EMPTY
第二次通话后:#EMPTY#NewString#EMPTY
第三次通话后:#EMPTY#EMPTY#NewString
printwriter (PrintWriter saver = new PrintWriter(new FileWriter(fileName))) 在保护程序文件中打开,而不是在主文件中,因此每次调用都会打开一个新的 PrintWriter。我 .flush() 和 .close() 在 saver 方法的末尾(它是一个 void 方法)。
为什么在下一次调用该方法之前文件似乎没有保存?=S 我是否必须强制执行某种等待直到文件不再打开的命令,所以,我该怎么做?
public static void main(String[] args) throws IOException {
SaveGame.saveState("adventure/save/s1.save", new Adventure(), 0);
SaveGame.saveState("adventure/save/s2.save", new Adventure(), 1);
SaveGame.saveState("adventure/save/s3.save", new Adventure(), 2);
}
接着:
public class SaveGame {
public static void saveState(String fileName, Adventure a, int slot) throws IOException {
//UPDATE MASTER SAVE FILE save.txt
String[] save = new String[3];
try {
Scanner openSave = new Scanner(new FileReader("/adventure/save/save.txt"));
openSave.useDelimiter("#");
save[0] = openSave.next();
save[1] = openSave.next();
save[2] = openSave.next();
openSave.close();
}
catch (FileNotFoundException e) {
save[0] = "EMPTY";
save[1] = "EMPTY";
save[2] = "EMPTY";
}
save[slot] = "newString"; //change the CURRENT save in the given slot to the new
PrintWriter updater = new PrintWriter(new FileWriter("adventure/save/save.txt"));
updater.println("#" + save[0] + "#" + save[1] + "#" + save[2]);
updater.flush();
updater.close();