Java中FileOutputStream写入int值到文件显示哈希符号问题咨询
问题原因解析
这是个很典型的字节写入与字符编码混淆的问题,我来给你拆解清楚:
为什么第一个代码会显示哈希符号?
看你第一段代码里的fo.write(a),这里的a是值为2的int变量,但FileOutputStream的write(int b)方法并不是把整个int值写入文件——它只会取这个int的低8位字节(也就是0-255范围的数值),把它当作ASCII编码对应的字符写入。
而ASCII码值为2的字符是STX(文本开始符),这是一个不可打印的控制字符,普通文本编辑器无法显示这类字符,就会用哈希符号(或者其他占位符)来代替它,这就是你看到的现象。
为什么第二个代码能正常显示?
第二段代码里,你把字符串"2"转成字节数组b,这里的getBytes()方法默认会把字符'2'转换成它对应的ASCII编码值——也就是50,然后写入文件。ASCII码50对应的就是可打印的数字字符'2',所以文本编辑器能正常显示出来。
怎么解决这个问题?
如果你的需求是把数字2以可打印的字符形式写入文件,有几种简单的方式:
- 直接写入字符的ASCII码:
fo.write('2')(单引号的'2'是char类型,它的ASCII值就是50) - 把int转成字符串后再写入,就像你第二段代码那样
- 使用更适合处理文本的流,比如
PrintStream,它可以直接处理基本类型:File f = new File("even.txt"); PrintStream ps = new PrintStream(f); ps.print(2); // 直接写入数字2的字符形式 ps.close();
内容的提问来源于stack exchange,提问作者Dev Joshi
相关产品推荐
相关产品推荐

