Java中的IO流

Java中的IO流
    0.io 流 : 读写文件内部的内容,上传下载,拷贝文件,拷贝文件夹...
    1.流 : 就是管道
        以先入先出的方式进行流动
        作用 : 做数据传输
        数据源  ------>  目的地
        流的分类 :
            按照流向分 : (以程序为中心)
                输入流
                 输出流
            按照操作单元 :
                字节流 : 万能流
                字符流 : 操作纯文本文件
             按照功能划分 :
                 节点流 : 真实做读入写出的流
                处理流|功能流 : 增强节点流的功能,提高节点流的性能
            以上的所有分类之间都是相辅相成的
    2.字节流
        输入流 : InputStream
            根据数据源选择节点流 : 节点流
            数据源为字节数组 :  ByteArrayInputStream字节数组输入流(了解)
            数据源为文件 : FileInputStream文件字节输入流
            操作
                需求 : 从文件中读入数据到程序
                文件 : 数据源   -->    程序 : 目的地
                1)构建文件字节输入流
                    FileInputStream(File file)通过打开与实际文件的连接来创建FileInputStream ,该文件由文件系统中的File对象file命名。
                    FileInputStream(String name) 通过打开与实际文件的连接来创建FileInputStream ,该文件由文件系统中的路径名name命名。
                2)读入数据
                3).使用数据
                     System.out.println(is.read());  //如果读到文件末尾返回-1
                4).关闭
                优化 一:
                    之前使用字节流每次读入一个字节数据,重复读入多次,重复读入的代码过于冗余,不够精简
                    可以通过循环结构简化重复读入的操作
                    1.与文件建立联系(数据源文件|目的地文件
                    2.构建流(文件字节输入流)
                    3.读入数据
                    4.使用数据
                    5.关闭
                优化二:
                    每次读入一个字节,循环读入多次,虽然代码简洁,但是效率较低
                    可以从每次读入一个字节数据变为每次读入一卡车字节数据
                    int read(byte[] b) 从输入流中读取一些字节并将它们存储到缓冲区数组b中。
                    返回值 : 为每次读入到字节数组中数据的个数
                    1.与文件建立联系(数据源文件|目的地文件)
                    2.构建流(文件字节输入流)
                    3.读入数据
                        int len; //记录每次读入的数据个数
                        byte[] car = new byte[1024];
                        while((len=is.read(car))!=-1)
                    4.使用数据
                         System.out.println(new String(car,0,len));
                    5.关闭
                从输入流中读取所有剩余字节。
                    System.out.println((char)(is.read()));
                    System.out.println(new String(is.readAllBytes()));
                异常捕获+资源关闭
                     jdk7下新增 : try-with-resources,对try中创建的资源在使用完毕之后进行关闭,要求资源的类型必须实现了AutoCloseable接口
                    jdk7之前 : try ..catch ..finally
                    jdk7新增 : try-with-resources
                    jdk9之前 :
                    jdk9新增 :
         输出流 : OutputStream
            这个抽象类是代表字节输出流的所有类的超类。
            根据目的地选择节点流 :
                 当目的地为字节数组 : ByteArrayOutputStream 字节数组输出流
                当目的地为文件 :  FileOutputStream 文件字节输出流
            注意 :  如果目的地文件存在并且包含内容,写出默认覆盖,可以调用重载构造器,boolean append-->true追加  false覆盖
            如果目的地文件不存在,系统会自动创建目的地文件,但是目的地文件所在路径(文件夹)不会自动创建
            操作
                需求 : 将程序中的数据写出到输出流中,流向目的地文件
                1)与目的地文件建立联系
                2)构建文件字节输出流
                    FileOutputStream os = new FileOutputStream("D://AAA/test2.txt"); //默认覆盖
                    FileOutputStream os = new FileOutputStream("D://AAA/test.txt",true);  //追加
                3)准备数据
                4)写出数据
                5)刷出
                6)关闭
    //声明
        FileInputStream is = null;
        try{
            //1.与文件建立联系(数据源文件|目的地文件)
            //2.构建流(文件字节输入流)
            is = new FileInputStream("D://AAA/test2.txt");
            //3.读入数据
            int len; //记录每次读入的数据个数
            byte[] car = new byte[1024];
            while((len=is.read(car))!=-1){
                //4.使用数据
                System.out.println(new String(car,0,len));
            }
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //5.关闭
            if(is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }*/
    try(
                FileInputStream is =new FileInputStream("D://AAA/test2.txt");
        ){
            //1.与文件建立联系(数据源文件|目的地文件)
            //2.构建流(文件字节输入流)
            //3.读入数据
            int len; //记录每次读入的数据个数
            byte[] car = new byte[1024];
            while((len=is.read(car))!=-1){
                //4.使用数据
                System.out.println(new String(car,0,len));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }*/

    FileInputStream is =new FileInputStream("D://AAA/test2.txt");
        /*try(
                FileInputStream is2 = is;
        ){
            //1.与文件建立联系(数据源文件|目的地文件)
            //2.构建流(文件字节输入流)
            //3.读入数据
            int len; //记录每次读入的数据个数
            byte[] car = new byte[1024];
            while((len=is2.read(car))!=-1){
                //4.使用数据
                System.out.println(new String(car,0,len));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }*/
    try(is){
            //1.与文件建立联系(数据源文件|目的地文件)
            //2.构建流(文件字节输入流)
            //3.读入数据
            int len; //记录每次读入的数据个数
            byte[] car = new byte[1024];
            while((len=is.read(car))!=-1){
                //4.使用数据
                System.out.println(new String(car,0,len));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值