一个关于FileReader读文件时有关编码问题的试验

由于在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读取的文本文件?

结果其实和预想中有点不太一样,或者说还有什么本地的属性可以影响吗?还有待于确认


实验结果暂时就是这样了,有什么问题请不吝赐教,谢谢

猜你喜欢

转载自blog.csdn.net/SeasonSoy/article/details/83024244