java的转换流有InputStreamReader和OutputStreamWriter。
1.InputStreamReader是Reader的子类,可以将InputStream(字节流)包装(转换)成Reader(字符流)。
2.OutputStreamWiter是Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流)。
3.当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文乱码问题,所以建议将字节流转换成字符流。
4.可以在使用时指定编码格式(比如 utf-8,gbk,gb2312,ISO8859-1等)。
1.将字节流FileInputStream转成字符流 InputSteamReader,指定编码(gbk/utf8)
import java.io.*;
/**
* 演示使用InputStreamReader 转换流解决中文乱码问题
* 将字节流 FileInputStream 转成字符流 InputStreamReader,指定编码 gbk/utf-8
*/
public class InputStreamReader_ {
public static void main(String[] args) throws IOException {
String filePath = "e:\\a.txt";
//1.把FileInputStream 转成 InputStreamReader
//2.指定编码gbk
//InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "gbk");
//3.把 InputStreamReader 传入 BufferedReader
//BufferedReader br = new BufferedReader(isr);
//将2 和3 合在一起
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "gbk"));
//4.读取
String s = br.readLine();
System.out.println("读取内容=" + s);
//5.关闭外层流
br.close();
}
}
2.将字节流FileOutputStream转成字符流 OutputSteamReader,指定编码(gbk/utf8)
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
/**
* 演示 OutputStreamWriter使用
* 把FileOutputStream 字节流 ,转成字符流 OutputStreamWriter
* 指定处理的编码 gbk/utf-8/utf8
*/
public class OutputStreamWriter_ {
public static void main(String[] args) throws IOException {
String filePath = "e:\\hsp.txt";
String charSet = "gbk";
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filePath),charSet);
osw.write("hi,韩顺平教育");
osw.close();
System.out.println("按照" + charSet + "保存文件成功~");
}
}