今天复习java基础知识时候遇到个问题。我用流存的时候是UTF-8,但是使用FileReader读的时候,竟然不乱码。。为什么呢?难道FileReader不是GBK格式吗? public static void main(String[] args) throws Exception {
//writFile();
readFile();
}
public static void readFile()throws Exception{
FileReader fileReader = new FileReader("F:/a.txt");
int len=0;
while ((len=fileReader.read())!=-1) {
System.out.println((char)len);
}
fileReader.close();
}
public static void writFile()throws Exception{
FileOutputStream fileOutputStream = new FileOutputStream("F:/a.txt");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"utf-8");
outputStreamWriter.write("您好ass");
outputStreamWriter.close();
}
1 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
你这样new出来的FileReader,底层是使用默认字符编码的,默认字符编码是Charset.defaultCharset(),这个是和运行环境有关的,也可以通过java命令行参数指定。
总之,这个默认字符编码不是一个开发人员完全可以掌控的参数,也许你本机是好的、放到服务器上乱码,或者反之。
所以,这里保险点的办法是先获得字节流(FileInputStream),然后把字节流转成字符流,转的时候是可以自己制定字符编码的,这样不管是什么环境,程序的运行结果都是一致的。
另外,close()方法一定要写在finally{}里,虽然不是正式的代码,但要养成这个习惯。
添加回答
举报
0/150
提交
取消
