Java:文件转换流(解决编码问题,防止出现乱码)

Posted il_持之以恒_li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:文件转换流(解决编码问题,防止出现乱码)相关的知识,希望对你有一定的参考价值。

字符集charset

也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。

GBxxx字符集:gbk、gb2312、gb18030(最新的中文码表)

InputStreamReader

FileReader可以读取idea默认编码格式(utf-8)的文件,读取系统默认编码(中文gbk)会产生乱码

gbk中文码表,使用两个字节存储一个中文,utf-8国际标准码表,使用三个字节存储一个中文

package file_main;

import java.io.FileReader;
import java.io.Reader;

public class Test2 {
	
	public static void main(String[] args) throws Exception{
		
		Reader reader = new FileReader("C:\\\\Users\\\\27427\\\\Desktop\\\\1.txt");
		// 这个文件是在电脑桌面新建的一个文件
		char[] chars = new char[1024];
		int count=reader.read(chars);
		System.out.println(new String(chars,0,count));
		reader.close();
	}
}

// 结果乱码

使用InputStreamReader来读取

package file_main;

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;

public class Test2 {
	
	public static void main(String[] args) throws Exception{
		
		Reader r = new InputStreamReader(new FileInputStream("C:\\\\Users\\\\27427\\\\Desktop\\\\1.txt"),"gbk");
		
		char[] chars = new char[1024];
		int count=r.read(chars);
		System.out.println(new String(chars,0,count));
		r.close();
	}
}

OutputStreamWriter(父类为Writer,是字符流通向字节流的桥梁,可使用指定charset将要写入流中的字符编码成字节)

构造方法

OutputStreamWriter(OutStream out)

OutputStreamWriter(OutStream out,String charsetName)

package file_main;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

public class Test2 {
	
	public static void main(String[] args) throws Exception{
		
		OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("C:\\\\Users\\\\27427\\\\Desktop\\\\1.txt"),"utf-8");
		writer.write("你好!");
		writer.flush();
		writer.close();
	}
}
转换文件编码步骤
  1. 创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码名称
  2. 创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码名称
  3. 使用InputStreamReader对象相应的方法读取文件
  4. 使用OutputStreamWriter对象中相应方法,把读取的 数据写入到文件中
  5. 释放资源

以上是关于Java:文件转换流(解决编码问题,防止出现乱码)的主要内容,如果未能解决你的问题,请参考以下文章

Java基础教程——转换流

新手小白学java 编码转换流 OutputStreamWriter InputStreamReader

如何解决GBK转换UTF-8乱码问题

08 转换流

java中输入输出中文乱码,怎么办

java 字符流 字节流