转换流:是字符流和字节流之间的桥梁
作用:字节流想要使用字符流中的方法
练习1:转换文件编码
需求1:手动创建一个GBK文件,把文件中的中文读取到内存中,不能出现乱码
package a04convertstreamdemo;
import java.io.*;
import java.nio.charset.Charset;
public class ConvertStreamDemo1 {
public static void main(String[] args) throws IOException {
/* //1.创建对象并指定字符编码
InputStreamReader isr=new InputStreamReader(new FileInputStream("E:\\JAVA\\24_3_31\\basic_code\\aaa\\a.txt"),"GBK");
//2.读取数据
int ch;
while((ch=isr.read())!=-1){
System.out.print((char)ch);
}
isr.close();
*/
FileReader fr=new FileReader("E:\\JAVA\\24_3_31\\basic_code\\aaa\\a.txt", Charset.forName("GBK"));
//2.读取数据
int ch;
while((ch=fr.read())!=-1){
System.out.print((char)ch);
}
fr.close();
}
}
运行结果:
需求2:把一段中文按照GBK的方式写到本地文件
package a04convertstreamdemo;
import java.io.*;
import java.nio.charset.Charset;
public class ConvertStreamDemo2 {
public static void main(String[] args) throws IOException {
//利用转换流按照指定字节编码写出
/* //1.创建转换流的对象
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("Test\\b.txt"),"GBK");
//2.写出数据
osw.write("鹿晗真帅");
//3.释放资源
osw.close();
*/
FileWriter fw=new FileWriter("Test\\c.txt", Charset.forName("GBK"));
//2.写出数据
fw.write("鹿晗真帅");
//3.释放资源
fw.close();
}
}
运行结果:
需求3:将本地文件中的GBK文件,转成UTF-8
package a04convertstreamdemo;
import java.io.*;
import java.nio.charset.Charset;
public class ConvertStreamDemo3 {
public static void main(String[] args) throws IOException {
//将本地文件中的GBK文件,转成UTF-8
//JDK11以前的方案
/* InputStreamReader isr=new InputStreamReader(new FileInputStream("Test\\b.txt"),"GBK");
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("Test\\d.txt"),"UTF-8");
int b;
while((b= isr.read())!=-1){
osw.write(b);
}
osw.close();
isr.close();
*/
//替代方案
FileReader fr=new FileReader("Test\\b.txt", Charset.forName("GBK"));
FileWriter fw=new FileWriter("Test\\e.txt",Charset.forName("UTF-8"));
int b;
while((b= fr.read())!=-1){
fw.write(b);
}
fw.close();
fr.close();
}
}
运行结果:
练习2:读取文件中的数据
利用字节流读取文件,每次读一整行,而且不能出现乱码
package a04convertstreamdemo;
import java.io.*;
public class ConvertStreamDemo4 {
public static void main(String[] args) throws IOException {
/* FileInputStream fis=new FileInputStream("Test\\result.txt");
InputStreamReader isr=new InputStreamReader(fis);
BufferedReader br=new BufferedReader(isr);
String str = br.readLine();
System.out.println(str);
br.close();
*/
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("Test\\result.txt")));
String line;
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
}
}
运行结果: