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 消息的单词,这样程序就可以逐字响应命令。

你在打电话给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,因此不建议这样做。

最新更新