使用BufferedWriter写入整数到txt出现中文乱码,如何正确写入?
问题原因
首先明确:该问题和爬取数据的编码完全无关,是BufferedWriter方法调用的重载问题。
你调用的bw.write(actualCaseCount)使用的是Writer类的write(int c)重载,这个方法的作用是把传入的int值作为Unicode编码值写入对应的字符,而非写入整数的十进制数字形式。你遇到的“毉”字,刚好就是你拿到的病例数对应的Unicode编码值对应的中文字符,所以控制台打印整数正常,写入文件就变成了乱码汉字。
解决方法
只需要把整数转为字符串后再写入即可,修改写入的那行代码:
// 原错误写法 // bw.write(actualCaseCount); // 修正为 bw.write(String.valueOf(actualCaseCount));
如果需要写入后自动换行,方便后续读取,可以改成:
bw.write(String.valueOf(actualCaseCount)); bw.newLine();
也可以用更方便的PrintWriter替代BufferedWriter,支持直接写入整数:
PrintWriter pw = new PrintWriter(new FileWriter("caseCountFile")); pw.println(actualCaseCount); pw.flush(); pw.close();
额外优化建议
- 你目前代码中把jsoup爬取到的内容写入
data临时文件再读取的逻辑完全可以省略,直接在内存中处理info元素即可,减少不必要的IO操作。 - 流操作建议用Java 7+提供的try-with-resources语法,会自动关闭资源,不需要手动调用
close(),避免资源泄漏。示例写法:
try (BufferedWriter bw = new BufferedWriter(new FileWriter("caseCountFile"))) { bw.write(String.valueOf(actualCaseCount)); } catch (IOException e) { e.printStackTrace(); }
内容的提问来源于stack exchange,提问作者Wyatt
相关产品推荐
相关产品推荐

