一、转换流【重点】
1、编码表
编码表就是对文字的编码,计算机其实只能识别二进制的数字,所有的数据都需要转成二进制才能保存。
idea中默认的码表是UTF-8码表,windows中默认的码表可能是UTF-8也可能是GBK(ANSI)
2、输入转换流InputStreamReader类
构造方法
InputStreamReader(InputStream in) : 创建一个使用默认字符集的字符流。 InputStreamReader(InputStream in, String charsetName) : 创建一个指定字符集的字符流
代码演示
import java.io.*;
public class Test01_输入转换流 {
public static void main(String[] args) throws IOException {
//创建对象
//InputStreamReader(InputStream in) : 创建一个使用默认字符集的字符流。
//InputStreamReade r isr = new InputStreamReader(new FileInputStream("C:\\Users\\jin\\Desktop\\123.txt"));
//InputStreamReader(InputStream in, String charsetName) : 创建一个指定字符集的字符流
InputStreamReader isr2 = new InputStreamReader(new FileInputStream("C:\\Users\\jin\\Desktop\\123.txt"),"gbk");
//转换流和字符流的方法是一样的
int i;
while((i=isr2.read()) != -1){
System.out.println((char)i);
}
//关流
isr2.close();
}
}
3、输出转换流OutputStreamWriter类
构造方法
OutputStreamWriter(OutputStream in) : 创建一个使用默认字符集的字符流。 OutputStreamWriter(OutputStream in, String charsetName) : 创建一个指定字符集的字符流
代码演示
import java.io.*;
public class Test02_输出转换流 {
public static void main(String[] args) throws IOException {
//OutputStreamWriter(OutputStream in) : 创建一个使用默认字符集的字符流。
//OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\jin\\Desktop\\abc.txt"));
//OutputStreamWriter(OutputStream in, String charsetName) : 创建一个指定字符集的字符流
OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream("C:\\Users\\jin\\Desktop\\abc.txt"),"GBK");
//输出的方法和字符流的方法一样
osw2.write("嘿嘿嘿哈哈哈");
//关流
osw2.close();
}
}
总结
转换流的本质其实属于字符流,可以调用普通字符流的所有方法。
功能:使用不同的码表进行IO操作。
4、练习:把UTF-8文件转成GBK文件
import java.io.*;
import java.util.ArrayList;
public class Test03_转换流案例 {
public static void main(String[] args) throws IOException {
//字符转换流(因为读取的UTF-8文件,用不用转换流都可以)
InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\Users\\jin\\Desktop\\出师表.txt"));
//创建集合
ArrayList<Character> list = new ArrayList<>();
//从文件中读取
int i;
while ((i=isr.read()) != -1){
//把字符放到集合中
list.add((char)i);
}
//输入流用完了就关流
isr.close();
//字符转换流(以GBK的方式输出)
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\jin\\Desktop\\出师表.txt"),"GBK");
//遍历集合
for (Character c : list) {
//把集合的字符输出
osw.write(c);
}
//输出流用完了就关流
osw.close();
}
}