我是一个想成为程序员的菜鸟,遇到了这个我找不到答案的问题。
我用 Eclipse
,对于我使用的程序 slick
和 lwjgl-2.9.3
以下代码处于一种状态,在 public void update(...)
我有这部分代码的问题:
(file.txt 存在并且名称中没有大写字母,giveToFile 是一个字符串)(没有抛出异常)
try{
BufferedWriter bw = new BufferedWriter(new FileWriter("src/file.txt"));
bw.write(giveToFile);
bw.close();
}catch(IOException e){
e.printStackTrace();
}
( 编辑:
try{
bw = new BufferedWriter(new FileWriter("src/file.txt"));
bw.write(giveToFile);
bw.flush();
}catch(IOException e){
e.printStackTrace();
}finally {
if (bw != null){
try {
bw.close();
}catch (Throwable t){
t.printStackTrace();
}
}
}
产生了相同的错误)
我在 try 块的末尾放置了一个 System.out.print,它运行正常,并且只运行一次。我还使用了 g.drawString 和
giveToFile
总是给出预期的字符串。我执行了以下两个实验。 (该程序是一个游戏式的东西,最后你会根据你的表现得到一个分数,然后把它放在高分中,然后重写 TXT 文件。)(我建议之前阅读 TLDR。)实验一(file.txt : "0 0 0 0 0")(成功):
- 从 txt 加载的字符串:"0 0 0 0 0"
- giveToFile(字符串):“15 0 0 0 0”
- 从文本开始的字符串:“15 0 0 0 0”
- giveToFile(字符串):“30 15 0 0 0”
- 从 txt 加载的字符串:“30 15 0 0 0”
- giveToFile(字符串):“30 15 0 0 0”
实验 2 (file.txt : "0 0 0 0 0")(失败):
- 从 txt 加载的字符串:"0 0 0 0 0"
- giveToFile(字符串):“15 0 0 0 0”
- 从文本开始的字符串:“15 0 0 0 0”
- giveToFile(字符串):“30 15 0 0 0”
- 从 txt 中提取的字符串:“15 0 0 0 0”
- giveToFile(字符串):“15 0 0 0 0”
TLRD:除非我手动检查,否则程序不会写入 TXT 文件
有一个bug,没有,取决于我是否检查了txt文件
很抱歉这个长问题,如果它是 super 简单的问题,我很抱歉,但我是初学者,在互联网上找不到任何解决方案,提前感谢您的帮助
编辑:
我用它来关闭程序:(xpos 和 ypos 是鼠标坐标)(基本上是一个原始的退出按钮)
if((xpos>= 200 && xpos <= 400) && (ypos>=100 && ypos <=200)){
if(Mouse.isButtonDown(0)){
System.exit(0);
}
}
我得到了这个:(没有异常(exception))
4 月 30 日星期四 16:44:14 CEST 2015 信息:Slick Build #237
2015 年 4 月 30 日星期四 16:44:14 CEST 信息:LWJGL 版本:2.9.3
2015 年 4 月 30 日星期四 16:44:14 信息:原始显示模式:1366 x 768 x 32 @60Hz
2015 年 4 月 30 日星期四 16:44:14 信息:TargetDisplayMode:600 x 600 x 0 @0Hz
2015 年 4 月 30 日星期四 16:44:15 CEST 信息:开始显示 600x600
4 月 30 日星期四 16:44:15 CEST 2015 信息:使用 Java PNG 加载程序 = true
2015 年 4 月 30 日星期四 16:44:15 CEST 信息: Controller 不可用
这部分读取文件,没有其他部分对文件做任何事情,阅读器工作正常:
try{
InputStream is = getClass().getResourceAsStream("/file.txt");
Scanner fileIn = new Scanner(is);
for(int i=0; i<SCOREMAX; i++){
scoreInt[i] = fileIn.nextInt();
}
fileIn.close();
}catch (Exception e) {
e.printStackTrace();
}
它在 public void init 中,SCOREMAX 的类型是
public static final int
最佳答案
您需要close
BufferedWriter
在您的 finally
堵塞。
或者,您可以 flush
您的 BufferedWriter
以及 try
写完后阻止,尽管 close
操作将首先刷新它。
这是一个重新审视的示例,Java 6 风格:
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter("src/file.txt"));
bw.write(giveToFile);
// bw.flush(); // if needed
}
catch(IOException e){
e.printStackTrace();
}
finally {
if (bw != null) {
try {
bw.close();
}
catch (Throwable t) {
t.printStackTrace();
}
}
}
... 和 Java 7 风格(“尝试”和
AutoClosable
s):try (BufferedWriter bw = new BufferedWriter(new FileWriter("src/file.txt"))) {
bw.write(giveToFile);
bw.flush();
}
catch(IOException e){
e.printStackTrace();
}
关于java - 薛定谔的错误,除非手动检查,否则 BufferedWriter 不会写入 TXT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29970216/