【JAVA入门】Day42 - 转换流
文章目录
- 【JAVA入门】Day42 - 转换流
转换流是字符流和字节流之间的桥梁。
转换流中的输入流叫做 InputStreamReader,它可以把字节流转换为字符流。
转换流的输出流叫做 OutputStreamWriter,它可以把字符流转换成字节流。
【使用例1】把一个 GBK 的文件中的中文读取到内存中,不能出现乱码。(作用1:按照指定的字符集读取数据)
package ConvertStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class ConvertStreamDemo1 {
public static void main(String[] args) throws IOException {
/*
利用转换流按照指定字符编码读取数据
D:\IdeaProjects\HelloWord\src\ConvertStream\GBKFile.txt
*/
//1.创建转换流对象
//两个参数,第一个是要转换的字节输入流,第二个是编码类型
InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt"), "GBK");
//2.读取数据
//转换流本身就是一个字符流,可以直接用字符流的方法
int ch;
while((ch = isr.read()) != -1){
System.out.print((char)ch);
}
//3.释放资源
isr.close();
}
}
在 JDK11 以后,这种转码方式被替代了,替代它的是 FileReader() 构造新的参数—— Charset charset 。
package ConvertStream;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
public class ConvertStreamDemo1 {
public static void main(String[] args) throws IOException {
/*
利用转换流按照指定字符编码读取数据
D:\IdeaProjects\HelloWord\src\ConvertStream\GBKFile.txt
*/
/* //1.创建转换流对象
//两个参数,第一个是要转换的字节输入流,第二个是编码类型
InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt"), "GBK");
//2.读取数据
//转换流本身就是一个字符流,可以直接用字符流的方法
int ch;
while((ch = isr.read()) != -1){
System.out.print((char)ch);
}
//3.释放资源
isr.close();*/
//1.创建字符输入流对象
//注意这里的编码是一个类,叫Charset类
FileReader fr = new FileReader("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt", Charset.forName("GBK"));
//2.读取数据
int ch;
while((ch = fr.read()) != -1){
System.out.print((char)ch);
}
//3.释放资源
fr.close();
}
}
【使用例2】利用转换流按照指定的字符编码写出数据。
package ConvertStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
public class ConvertStreamDemo2 {
public static void main(String[] args) throws IOException {
/*
利用转换流按照指定字符编码写出数据
D:\IdeaProjects\HelloWord\src\ConvertStream\GBKFile.txt
*/
/* //1.创建转换输出流对象
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt"), "GBK");
//2.写出数据
osw.write("你好你好你好你好!!");
//3.释放资源
osw.close();*/
//1.创建字符流对象
FileWriter fw = new FileWriter("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt", Charset.forName("GBK"));
//2.写出数据
fw.write("你好你好你好你好!!");
//3.释放数据
fw.close();
}
}
【使用例3】将本地文件中的 GBK 文件,转码成 UTF-8。
package ConvertStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.Charset;
public class ConvertStreamDemo3 {
public static void main(String[] args) throws IOException {
/*
将 GBK 文档转换为 UTF-8 文件
*/
//1.创建输入输出流
FileReader fr = new FileReader("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\GBKFile.txt", Charset.forName("GBK"));
FileWriter fw = new FileWriter("D:\\IdeaProjects\\HelloWord\\src\\ConvertStream\\UTF8File.txt", Charset.forName("UTF-8"));
//2.逐字符写数据
int b;
while((b = fr.read()) != -1){
fw.write(b);
}
//3.关闭数据流
fw.close();
fr.close();
}
}