我正在为游戏创建一个保存游戏文件,但我的PrintWriter
只是用任何内容覆盖文件而不是我需要的数字。
以下是代码:
public void fileWriter() throws FileNotFoundException {
PrintWriter print = new PrintWriter(new File("C:\\Users\\john\\Desktop\\stats.txt"));
print.print(String.valueOf(this.swordNumber) + " ");
print.print(String.valueOf(this.shieldNumber) + " ");
print.print(String.valueOf(this.monstersDefeated) + " ");
print.print(String.valueOf(this.damageDealt));
}
我已经尝试了所有内容来打印这些变量,包括String.valueOf
,但它不起作用。
答案 0 :(得分:5)
您应该正确使用Java的资源try-catch块。即使抛出任何异常,这也会自动关闭流:
public void fileWriter() throws FileNotFoundException {
File file = new File("C:\\Users\\john\\Desktop\\stats.txt");
try (PrintWriter print = new PrintWriter(file)) {
print.print(Integer.toString(swordNumber) + " ");
print.print(Integer.toString(shieldNumber) + " ");
print.print(Integer.toString(monstersDefeated) + " ");
print.print(Integer.toString(damageDealt));
}
}
而不是String.valueOf()
我建议使用Integer.toString()
来使类型转换更加明显。
答案 1 :(得分:2)
退出之前没有关闭流 它没有得到冲洗和正确关闭。 写完后添加这一行:
print.close();
使用后应始终关闭文件句柄。
更好的是,将所有内容包装在一个try-with-resources中:
try (PrintWriter writer = new PrintWriter(new File("C:\\Users\\john\\Desktop\\stats.txt"))) {
// ...
}
这样你不必担心关闭它, 因此你永远不会“忘记”它。