1.介绍
有时候,我们需要把字节流转成字符流,就需要用到转换流。
2.乱码案例
这里读取的文件编码不是utf-8
public static void main(String[] args) {
//首先读取文件
//1.首先创建字符流输入
//2.使用处理流
//3.默认情况下,读取文件是按照UTF-8读取编码
BufferedReader bufferedReader = null;
try {
String readL = "";
bufferedReader = new BufferedReader(new FileReader("d:\\news3.txt"));
while ((readL=bufferedReader.readLine())!=null){
System.out.println(readL);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(bufferedReader!=null){
bufferedReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.转换流
- InputStreamReader是Reader的子类,可以将InputStream(字节流)包装成Reader(字符流);
- OutputStreamWriter是Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流);
- 当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流。
- 可以在使用时指定编码格式(比如utf-8,gbk,gb2312,ISO8859-1等)
1.代码案例
1.输入
@Test
public void buff(){
//字节流
FileInputStream fileInputStream = null;
//字符流
InputStreamReader inputStreamReader = null;
//处理流
BufferedReader bufferedReader = null;
//1.把FileInputStream转成InputStreamReader
//2.指定编码 gbk
//3.把InputStreamReader传入BufferedReader->提高效率
try {
String readL = "";
fileInputStream= new FileInputStream("d:\\news3.txt");
inputStreamReader = new InputStreamReader(fileInputStream,"gbk");
bufferedReader = new BufferedReader(inputStreamReader);
while ((readL=bufferedReader.readLine())!=null){
System.out.println(readL);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileInputStream!=null){
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStreamReader!=null){
try {
inputStreamReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bufferedReader!=null){
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.输出
@Test
public void out() throws IOException{
OutputStreamWriter outputStreamWriter = null;
outputStreamWriter = new OutputStreamWriter(
new FileOutputStream("d:\\news4.txt"),"gbk");
outputStreamWriter.write("车上车少仙鹤股份公司的");
outputStreamWriter.close();
}