java – PrintWriter:读取和写入同一文件 – 在再次打开之前,文件似乎不会被保存
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – PrintWriter:读取和写入同一文件 – 在再次打开之前,文件似乎不会被保存,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2364字,纯文字阅读大概需要4分钟。
内容图文
![java – PrintWriter:读取和写入同一文件 – 在再次打开之前,文件似乎不会被保存](/upload/InfoBanner/zyjiaocheng/785/986553929595443ca0584b272a17d106.jpg)
我正在尝试创建一个程序,将新数据写入保存文件.该文件有三个“槽”,即由分隔符分隔的三个字符串.主程序以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();
解决方法:
读者读取文件/adventure/save/save.txt,而编写者写入adventure / save / save.txt.除非您从文件系统的根目录(/)运行程序,否则它们不是相同的文件.
应用DRY原则(不要重复自己).创建一个包含文件路径的常量,并在使用路径的任何地方使用常量.这将避免这样的错误.
另外,在finally块中关闭reader和writer,或者使用Java 7 try-with-resources构造.
内容总结
以上是互联网集市为您收集整理的java – PrintWriter:读取和写入同一文件 – 在再次打开之前,文件似乎不会被保存全部内容,希望文章能够帮你解决java – PrintWriter:读取和写入同一文件 – 在再次打开之前,文件似乎不会被保存所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。