转换流基本用法

转换流:是字符流和字节流之间的桥梁

作用:字节流想要使用字符流中的方法

练习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();

    }
}

运行结果:

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值