IO流(字符流,字节流,缓冲流,转换流)

流的分类

  1. 操作数据单位:字节流,字符流
  2. 数据的流向:输入流,输出流
  3. 流的角色:节点流,处理流

流的体系结构

抽象基类

  1. InputStream
  2. OutputStream
  3. Reader
  4. Writer

节点流(或文件流)

  1. FileInputStream
  2. FileOutputStream
  3. FileReader
  4. FileWriter

缓冲流(处理流的一种)

  1. BufferedInputStream
  2. BufferedOutputStream
  3. BufferedReader
  4. BufferedWriter

字符流

FileReader读入文件

为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally处理

        //实例化file类对象
        File file = new File("hello.txt");
        //提供具体的流
        FileReader fr = new FileReader(file);
        //数据读入
        //read():返回读入的一个字符,如果达到文件末尾,返回-1
        int data = fr.read();
        while(data!=-1){
            System.out.println((char) data);
            data = fr.read();
        }
        //关闭流
        fr.close();

使用read的重载方法读入

        //实例化file类对象
        File file = new File("hello.txt");
        //提供具体的流
        FileReader fr = new FileReader(file);
        //数据读入
        char[] cbuf = new char[5];
        int len;
        //read(char[] cbuf) 返回每次读入cbuf数组中的字符的个数,如果达到文件末尾,返回-1
        while ((len = fr.read(cbuf))!=-1){
//            for(int i=0;i<len;i++){
//                System.out.println(cbuf[i]);
//            }
            String str = new String(cbuf,0,len);
            System.out.println(str);
        }

FileWriter写出数据

  1. 对应的file可以不存在,不会报异常
  2. File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件。
  3. 如果流的构造器为:FileWriter(file,false)/FileWriter(file),会覆盖原有文件,FileWriter(file,true)不会覆盖原有文件,而是追加。

字节流

FileInputStream和FileOutputStream

  1. 对于文本文件(.txt .doc .java .cpp),使用字符流处理
  2. 对于非文本文件,使用字节流处理

缓冲流

作用:提高读写速度,因为内部提供了一个缓冲区。

        //实例化file类对象
        File file = new File("hello.jpg");
        File file1 = new File("hello1.jpg");
        //造节点流
        FileInputStream fis = new FileInputStream(file);
        FileOutputStream fos = new FileOutputStream(file1);
        //造缓冲流
        BufferedInputStream bis = new BufferedInputStream(fis);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        //读取 写入
        byte[] buffer = new byte[10];
        int len;
        while ((len = bis.read(buffer))!=-1){
            bos.write(buffer,0,len);
        }
        //先关外层流 再关内层流
        bos.close();
        bis.close();
        //关闭外层流时,内存流也会自动进行关闭。所以内存流的关闭,可以省略
//        fos.close();
//        fis.close();

转换流

作用:提供字节流和字符流之间的转换
InputStreamReader:将一个字节的输入流转换为字符的输入流
和OutputStreamWriter:将一个字符的输出流转换为字节的输出流

        FileInputStream fis = new FileInputStream("dpcp.txt");
        //参数2具体使用哪个编码 取决于文件保存时使用的编码
        InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
        //转换后才能用char[]接收
        char[] buffer = new char[10];
        int len;
        while ((len = isr.read(buffer))!=-1){
            System.out.println(new String(buffer,0,len));
        }
        isr.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值