由于在JAVA JDKAPI里个人认为FileReader
的描述有些模糊,( 该类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的),(也可能是渣翻版本本身的问题),搞不清楚
本文旨在测试:
FileReader究竟是以什么编码方式读取的文本
所以设计了以下试验
写方法
以GBK和UTF-8分别写了一个文本文件
/*
* 类变量
*/
private static final String GBK_FILE = "txt_gbk.txt";
private static final String GBK = "gbk";
private static final String UTF8_FILE = "txt_utf8.txt";
private static final String UTF8 = "utf-8";
写方法的实现,往文件里,写了一个“你好呀”
/**
* @throws IOException
*/
public static void write(String fileName,String charset) throws IOException {
String str = "你好呀";
//写
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName),charset));
bw.write(str);
bw.close();
}
调用
write(UTF8_FILE,UTF8);
write(GBK_FILE,GBK);
utf-8的大小是9个字节,gbk是6个。因为utf8的中文编码是3个字节一个汉字
读方法
对比测试了默认读和 自定义读
默认读的方法是使用了FileReader读取字符流,自定义是用字节流转成的字符流,实现如下
/**
* 默认读
* @throws IOException
*/
public static void showDefaultRead(String fileName) throws IOException {
//默认读
BufferedReader br = new BufferedReader(new FileReader(fileName));
readLine(br);
}
/**
* 自定义读
* @throws IOException
*/
public static void showCustomRead(String fileName,String charset) throws IOException {
//自定义读
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),charset));
readLine(br);
}
/**
* 操作流进行行读取
* @param br
* @throws IOException
*/
public static void readLine(BufferedReader br) throws IOException {
String line = null;
while((line=br.readLine())!=null) {
System.out.println(line);
}
br.close();
}
调用
//默认读和用GBK的方式 同时读取GBK的文本文件
showDefaultRead(GBK_FILE);
showCustomRead(GBK_FILE,GBK);
System.out.println();
//默认读和用utf8的方式 同时读取GBK的文本文件
showDefaultRead(GBK_FILE);
showCustomRead(GBK_FILE,UTF8);
System.out.println();
//默认读和用GBK的方式 同时读取UTF8的文本文件
showDefaultRead(UTF8_FILE);
showCustomRead(UTF8_FILE,GBK);
System.out.println();
//默认读和用utf8的方式 同时读取UTF8的文本文件
showDefaultRead(UTF8_FILE);
showCustomRead(UTF8_FILE,UTF8);
System.out.println();
输出结果
���ѽ
你好呀
���ѽ
���ѽ
你好呀
浣犲ソ鍛�
你好呀
你好呀
结论
明显可见,FileReader竟然是用UTF-8读取的文本文件?
结果其实和预想中有点不太一样,或者说还有什么本地的属性可以影响吗?还有待于确认
实验结果暂时就是这样了,有什么问题请不吝赐教,谢谢