一:基本概述
1、引入情况
① FileReader
读取文本文件和Windows系统中创建的文本文件默认编码不同,读入内存中会出现乱码。
② 针对文本文件,使用一个字节流进行数据的读入,希望将数据显示在控制台上,此时针对包含中文的文本数据,可能会出现乱码。
2、转换流的理解
转换流是字符与字节之间的桥梁。
二、InputStreamReader和OutputStreamWriter
1、InputStreamReader
- java.io.inputStreamReader
转换流java.io.InputStreamReader,是Reader子类,是从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。其字符集可以由名称指定,也可以接受平台的默认字符集。
- 构造器
① InputStreamReader(InputStream in): 创建一个使用默认字符集的字符流;
InputStreamReader isr1 = new InputStreamReadaer(new FileInputStream("in.txt"))
② InputStreamReader(InputStream in,String charsetName): 创建一个指定字符集的字符流;
InputStreamReader isr2 = new InputStreamReader(new FileInputStream("in.txt","GBK"))
- 示例代码
package IO.SwitchStream.InputStreamTest;
import java.io.FilenameFilter;
import java.io.InputStreamReader;
import java.io.*;
public class InputOutStreamTest {
public static void main(String[] args)throws IOException {
String fileName = "D:\\2024TianYuShiJie\\2024TianYuDataSource\\20241118资源\\gbk.txt";
//方式1:创建流对象,默认为UTF8编码
InputStreamReader isr1 = new InputStreamReader(new FileInputStream(fileName));
int charData;
while ((charData = isr1.read()) != -1){
System.out.println((char)charData);
}
isr1.close();
int charDataOne;
//方式2:
//创建流对象,指定GBK编码
InputStreamReader isr2 = new InputStreamReader(new FileInputStream(fileName),"GBK");
while ((charDataOne = isr2.read()) != -1){
System.out.println((char)charDataOne);
}
isr2.close();
}
}
2、OutputStreamWriter
- java.io.OutputStreamWriter
其是Writer的子类,是从字符流到字节流的桥梁。使用指定的字符集将字符编码为字节。其字符集可以由名称指定,也可以接受平台默认的字符集。
- 构造器
① OutputStreamWriter(OutputStream in): 创建一个使用默认字符集的字符流;
OutputStreamWriter isr = new OutputStreamWriter(new FileOutputStream("out.txt"))
② OutputStreamWriter(OutputStream in,String charsetName): 创建一个指定的字符集的字符流
OutputStreamWriter isr2 = new OutputStreamWriter(new FileOutputStream("out.txt"),"GBK")
- 示例代码
package IO.SwitchStream.InputStreamTest;
import java.io.*;
public class OutputStreamTest {
public static void main(String[] args)throws IOException {
String fileName = "D:\\2024TianYuShiJie\\2024TianYuDataSource\\20241118资源\\gbk.txt";
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(fileName));
osw.write("你好");
osw.close();
String fileName2 = "D:\\2024TianYuShiJie\\2024TianYuDataSource\\20241118资源\\gbk.txt";
OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream(fileName2),"GBK");
osw2.write("万事大吉");
osw2.close();
}
}