Java 字节流转字符流

本文深入讲解了Java中文件操作的基本概念,包括输入流和输出流、字节流和字符流的区别,以及如何使用缓冲流、数据流和对象流进行文件读写。特别关注了中文乱码问题的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在java.io包中操作文件

      1>按流向分:输入流和输出流

      2>按处理数据分:字节流和字符流

           2.1 字节流:  InputStream,OutputStream 都是抽象类(处理字节或二进制对象)

           2.2 字符流:  Reader,Writer都是抽象类,(一个字符占两个字节)(处理字符或字符串)

      3>流的处理如下:

 File file =new File("test1.txt");
3.1>缓冲流 (小说)
FileWriter fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw);

3.2>数据流(二进制流) 音频,视频,图片
FileInputStream fis=new FileInputStream(file);
DataInputStream  dis=new DataInputStream(fis);

3.3>对象流**
   序列化是将对象的状态写入到特定的流中的过程  (写)
   反序列化则是从特定的流中获取数据重新构建对象的过程 (读)
  FileInputStream fos = new FileInputStream(file);
  ObjectInputStream ois = new ObjectInputStream(fos);


注意:解决读取时中文乱码:
 (1)字符流+缓冲流==》不能解决
*(2)字节流转换成字符流+缓冲流==》解决
FileInputStream fis =new FileInputStream(file);
InputStreamReader reader=new InputStreamReader(fis,"gbk");
BufferedReader br=new BufferedReader(reader);)
 

读取时出现乱码问题:
 

java中提供了将字节流转为字符流的操作类,有也可以解决乱码问题:

public static void br2() {
        File file=new File("Intel.txt");
      
        try(
           //字节输入流对象
            FileInputStream fis =new FileInputStream(file);

         // 将字节输入流转化成字符输入流,并设置编码格式gbk,InputStreamReader为 Reader 的子类
            InputStreamReader reader=new InputStreamReader(fis,"gbk");

            //缓冲流对象
            BufferedReader br=new BufferedReader(reader);){

            System.out.println("读取当前文件编码:"+reader.getEncoding());

            String str="";
            //遍历读取
            while((str=br.readLine())!=null){
                System.out.println(str);
            }

        }catch (Exception ex){
            ex.printStackTrace();
        }
    }

效果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值