JAVA IO流读取中文出现乱码

乱码一般情况来说都是因为编码格式有问题,可能是写入的时候也可能是读取的时候。
本文所述情况为JAVA IO流读取CSV/TXT文件出现乱码

原来我的主要代码如下:

// JAVA代码
//新建了缓冲读取器对象
BufferedReader reader = new BufferedReader(new FileReader(fileArray[i]));
String line = reader.readLine();
for (int j = 0; j < item.length; j++) {
//							if (item[j].equals("产品编码"))
							System.out.println(item[j]);
						}

控制台输出如下:
JAVA IO流读取中文出现乱码_第1张图片

乱码嘛,一般都是编码问题,我这里默认是utf-8编码模式,但是读取出来是乱码,直接用电脑打开是正常的。

下面是我的改进代码:

//主要是读取文件流的时候要设置好读取时的编码格式,第二句的GBK就是我读取文件时选择GBK编码模式
//如果不写的话,默认使用的就是utf-8模式的,就会出现乱码
//这完全看当时文件写入用的什么模式,要用对应的模式读取。
	FileInputStream fis = new FileInputStream(fileArray[i]);// 换成你的文件名
	// 换成你的文件的编码模式GBK utf-8等等,可以自己试试或者想办法获取文件的编码模式
	InputStreamReader isr = new InputStreamReader(fis, "GBK");
	//新建缓冲阅读器对象
	BufferedReader reader = new BufferedReader(isr);
	//输出到控制台的步骤是一样的
	String line = reader.readLine();
	for (int j = 0; j < item.length; j++) {
//							if (item[j].equals("产品编码"))
							System.out.println(item[j]);
						}

控制台改进代码下的输出:
JAVA IO流读取中文出现乱码_第2张图片

总结: 编码模式不对一般都是表现为中文乱码,无法读取,无法作比较等。所以新建阅读器对象要小心一些,或者提前搞清楚文件的编码模式。
PS好像有个方法可以获取文件的编码模式,getencoding什么的,有空可以研究下,欢迎在评论中补充~

你可能感兴趣的:(代码,JAVA)