我一直无法找到原因。我在这段代码中遇到的唯一问题是,当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消息的字样,这样程序就可以逐字地对命令作出反应。
答案 0 :(得分:3)
您正在致电Writer.write(int)
。它将单个UTF-16代码点写入文件,仅占用最低16位。如果您的平台默认编码无法代表您尝试编写的代码点,则会写入'?'作为替代人物。
我怀疑你实际想要写出数字的文字表示,在这种情况下你应该使用:
write.write(String.valueOf(comb));
换句话说,将值转换为字符串,然后将其写出来。因此,如果comb
为123,则您会将三个字符(' 1',' 2',' 3')写入文件
我个人虽然避免FileWriter
- 我更喜欢使用OutputStreamWriter
包裹FileOutputStream
,因此您可以控制编码。或者在Java 7中,您可以使用Files.newBufferedWriter
更简单地完成此操作。
答案 1 :(得分:0)
write.write(new Integer(comb).toString());
您可以将int转换为字符串。否则你将需要int作为一个字符。这只适用于0-9的一小部分数字,因此不推荐使用。