Java FileWriter输出一个问号

时间:2014-08-10 06:30:31

标签: java filewriter

我一直无法找到原因。我在这段代码中遇到的唯一问题是,当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消息的字样,这样程序就可以逐字地对命令作出反应。

2 个答案:

答案 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的一小部分数字,因此不推荐使用。