java printwriter结尾写入_java – PrintWriter:读取和写入同一文件 – 在再次打开之前,文件似乎不会被保存...

博客内容涉及一个程序设计问题,程序旨在更新一个包含三个分隔字符串的文件。每次调用时,程序应替换其中一个字符串而不影响其他两个。然而,实际结果是每次调用都在文件中重写所有字符串,而非仅更新指定的‘槽’。问题可能源于PrintWriter的使用方式,可能需要确保文件在多次调用间正确关闭和释放,以避免数据丢失或覆盖。
摘要由CSDN通过智能技术生成

我正在尝试创建一个程序,将新数据写入保存文件.该文件有三个“槽”,即由分隔符分隔的三个字符串.主程序以slot作为参数调用saver程序,saver程序打开文件,将每个槽中的现有String读取到局部变量,用新String替换与给定槽对应的String,并覆盖文件与新的插槽.这应该导致只更新给定的槽,而其他两个保持与以前相同.

主程序连续三次调用保护程序,每个插槽一次.这应该导致保存文件看起来如下(其中#是分隔符):

在第一次通话之前:#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 saver = new PrintWriter(new FileWriter(fileName)))在保护程序文件中打开,而不是在主文件中打开,因此每次调用都会打开一个新的PrintWriter.我在保护程序方法结束时使用.flush()和.close()(这是一个void方法).

为什么在下一次调用方法之前,文件似乎没有被保存? = S我是否必须施加某种wait-until-file-not-open-anymore命令,这样,我该怎么做?

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值