FileWriter和FileReader在写、读文件时,使用系统当前默认的编码方式。
在中文win下encoding基本是GB2312,在英文win下基本是ISO-8859-1。所以要创建一个UTF-8的文件,使用FileWriter是不行的。
FileWriter和FileReader都不支持通过参数指定编码方式,而OutputStreamWriter和InputStreamReader可以。这两个类从名字上就可以看到是字节流和字符流的组合,实际上也是连接两者的桥梁。
读文件示例代码:
在中文win下encoding基本是GB2312,在英文win下基本是ISO-8859-1。所以要创建一个UTF-8的文件,使用FileWriter是不行的。
FileWriter和FileReader都不支持通过参数指定编码方式,而OutputStreamWriter和InputStreamReader可以。这两个类从名字上就可以看到是字节流和字符流的组合,实际上也是连接两者的桥梁。
FileReader读取文件的过程中,FileReader继承了InputStreamReader,但并没有实现父类中带字符集参数的构造函数,所以FileReader只能按系统默认的字符集来解码,然后在UTF-8 -> GBK -> UTF-8的过程中编码出现损失,造成结果不能还原最初的字符。
写文件示例代码:
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path),"UTF-8"); out.write("<?xml version=/"1.0/" encoding=/"utf-8/"?><a>Hello world</a>"); out.flush(); out.close();
读文件示例代码:
FileInputStream fis = new FileInputStream(FILENAME); InputStreamReader isr = new InputStreamReader(fis,CHARSET); BufferedReader br = new BufferedReader(isr); StringBuffer content = new StringBuffer(); String str2 = br.readLine(); while (str2 != null) { content.append(str2); str2 = br.readLine(); } br.close(); isr.close(); fis.close();