我一直找不到原因。我在这段代码中遇到的唯一问题是,当FileWriter
尝试将新值放入文本文件中时,它会放置一个 ?。我不知道为什么,甚至不知道这意味着什么。这是代码:
if (secMessage[1].equalsIgnoreCase("add")) {
if (secMessage.length==2) {
try {
String deaths = readFile("C:/Users/Samboni/Documents/Stuff For Streaming/deaths.txt", Charset.defaultCharset());
FileWriter write = new FileWriter("C:/Users/Samboni/Documents/Stuff For Streaming/deaths.txt");
int comb = Integer.parseInt(deaths) + 1;
write.write(comb);
write.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是readFile方法:
static String readFile(String path, Charset encoding) throws IOException {
byte[] encoded = Files.readAllBytes(Paths.get(path));
return new String(encoded, encoding);
}
此外,secMessage 数组是一个字符串数组,其中包含拆分为单个单词的 IRC 消息的单词,这样程序就可以逐字响应命令。
你在打电话给Writer.write(int)
.这会将单个 UTF-16 代码点写入文件,仅占用底部的 16 位。如果平台默认编码无法表示尝试编写的代码点,则会将"?"写入替换字符。
我怀疑你真的想写出数字的文本表示,在这种情况下你应该使用:
write.write(String.valueOf(comb));
换句话说,将值转换为字符串,然后将其写出。因此,如果comb
是 123,您将获得三个字符("1"、"2"、"3"(写入文件。
就个人而言,我会避免FileWriter
- 我更喜欢使用OutputStreamWriter
包装FileOutputStream
这样您就可以控制编码。或者在Java 7中,您可以使用Files.newBufferedWriter
更简单地执行此操作。
write.write(new Integer(comb).toString());
您可以将 int 转换为字符串。否则,您将需要 int 成为字符。这仅适用于一小部分数字 0-9,因此不建议这样做。