当文本文件和代码的编码不一致时,使用字符流会导致读取出来的文字乱码。如下:
读取文件的编码时GBK编码。
代码的编码时UTF-8的编码。
程序运行出来中文则是乱码。
这里就要使用到转换流了。
字节转换流
InputStreamReader 字节输入转换流
使用步骤
- 获取原始字节流
- 使用字节转换流转换
- 再转换为缓冲字符流
之后使用缓冲字符流的readLine()
方法读取.
package day0927;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
public class demo12 {
public static void main(String[] args) {
try (
//获取原始字节流
FileInputStream fis = new FileInputStream("src/e.txt");
//使用字节转换流转换
InputStreamReader isr = new InputStreamReader(fis,"GBK");
//再转换为缓冲字符流
BufferedReader bf = new BufferedReader(isr)
){
String line;
while ( (line=bf.readLine())!=null){
System.out.println(line);
}
}catch (Exception e) {
throw new RuntimeException(e);
}
}
}
OutputStreamWriter 字节输出转换流
接下来的代码示例,是从一个UTF-8编码的文件读取字符之后,输出到一个GBK编码的文件中。
package day0927;
import java.io.*;
public class demo12 {
public static void main(String[] args) {
try (
//获取原始字节流
FileReader fis = new FileReader("src/a.txt");
//再转换为缓冲字符流
BufferedReader bf = new BufferedReader(fis);
//获取原始字节输出流
OutputStream os = new FileOutputStream("src/e.txt",true);
//字节转换输出流将原始流转换为GBK编码
OutputStreamWriter gbk = new OutputStreamWriter(os,"GBK");
//转换为缓冲字符输出流
BufferedWriter bw = new BufferedWriter(gbk);
){
String line;
while ( (line=bf.readLine())!=null){
System.out.println(line);
//写入字符
bw.write(line);
//换行
bw.newLine();
}
}catch (Exception e) {
throw new RuntimeException(e);
}
}
}