【问题标题】:BufferedWriter is acting strangeBufferedWriter 表现得很奇怪
【发布时间】:2012-08-09 02:08:08
【问题描述】:

我正在尝试使用有效的高分机制制作游戏,并且我正在使用 java.io.BufferedWriter 写入高分文件。我对高分没有加密,我使用 Slick2D 和 LWJGL 进行渲染和用户输入。程序执行这段代码:

FileWriter fstream = new FileWriter("res/gabjaphou.txt");

BufferedWriter writer = new BufferedWriter(fstream);

writer.write(score); // score is an int value

writer.close(); // gotta save m'resources! lol

我打开由此生成的文本文件,它读取的只是一个问号。我不知道为什么会发生这种情况,我使用了我正在制作的另一个项目中的其他代码,我对此没有任何问题......有谁知道为什么?这真的很烦人! :C

【问题讨论】:

  • score 的可能值是多少?
  • “这真的很烦人!:C” - 是的,你的代码中的错误可能真的很烦人 :-)

标签: java bufferedwriter


【解决方案1】:

BufferedWriter.write(int) 是写单个字符,而不是整数。

public void write(int c)
throws IOException

写入单个字符。

覆盖:写入类 Writer
参数: c - int 指定要写入的字符
抛出: IOException - 如果发生 I/O 错误

试试

writer.write(String.valueOf(score));  

【讨论】:

    【解决方案2】:

    请使用writer.write(String.valueOf(score));,否则使用writes score as a character。 请参阅文档:

    写入单个字符。要写入的字符包含在给定整数值的低 16 位中;忽略高 16 位。

    你要使用的是Writer.write(String);使用String.valueOfInteger.toStringscore 转换为String

    writer.write(String.valueOf(score));
    

    【讨论】:

    • (见下方 Nivas 的 cmets)
    • @TehHippo 我最初评论了这个问题,然后在 Nivas 之前在这里发布了答案。
    • @SuperCheezGi,因为你在这里显得较新,请不要忘记标记答案accepted,这有助于解决问题。
    【解决方案3】:

    BufferedWriter 正在尝试将一系列字节写入文件,而不是数字。数字仍然是一个字符。

    考虑改用FileWriter,简单的如下: fileWriter.write(Integer.toString(score))write这里取一个字符串,但是输出应该是一样的。

    【讨论】:

    • 您需要将score 转换为String,否则您仍在调用write(int)
    • 正确;在这种情况下,Java 不会只处理它。已修复并注明,谢谢 ;)