06 IO流 03带有缓冲区的包装流 + 包装流和节点流 + 数据流 + 标准输出流

1、带有缓冲区的包装流

  /*
  * BufferedReader:
  *     带有缓冲区的字符输入流
  *     使用这个流的时候不需要自定义char数组,或者说不需要自定义byte数组,自带缓冲
  *
  *
  * */

        FileReader reader = null;
        try {
            reader = new FileReader("world.txt");
            //当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流
            //外部负责包装的这个流,叫做包装流,还有一个名字叫做:处理流
            //像当前这个程序来说:FileReader就是一个节点流,BufferedRead就是包装流(处理流)
            BufferedReader br = new BufferedReader(reader);

            //读一行
            String firstLine = br.readLine();
            System.out.println(firstLine);

            //读一行
            String secondLine = br.readLine();
            System.out.println(secondLine);
            
            //readLine读取一个文本行,但是不带换行符
            String s = null;
            while((s = br.readLine()) != null){
                System.out.println(s);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            // 指需要关闭包装流,不需要关闭节点流
            if(reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

2、包装流和节点流

 /*
        * 转换流:InputStreamReader
        * */
        //字节流
        FileInputStream in = new FileInputStream("world.txt");
        
        //通过转换流转换(InputStreamReader  将字节流转换成字符流
        InputStreamReader reader  = new InputStreamReader(in);
        
        //这个构造方法只能传一个字符流,不能传字节流
        //reader是节点流,br是包装流
        BufferedReader br = new BufferedReader(reader);
        
        //合并
        BufferedReader ttbr = new BufferedReader(new InputStreamReader(new FileInputStream("world.txt")));
        
 /*
       * BufferedWriter:带有缓冲的字符输出流
       * */
        //  BufferedWriter out = new BufferedWriter(new FileWriter("copy001"));
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("copy001",true)));
        out.write("hello world");
        out.write("\n");
        out.write("hello kitty");
        //刷新
        out.flush();
        //关闭最外层
        out.close();

3、数据流

 /*
      * java.io.DataOutputStream  :数据专属流
      * 这个流可以将数据连通数据的类型一并写入文件
      * 注意:这个文件不是普通文本文档(这个文件用记事本不能打开)
      *
      *
      * */
        //创建数据专属的字节输出流
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("data"));



        //把数据以及数据的类型一并写入文件
        byte a = 100;
        short b = 200;
        int c = 300;
        float d = (float)400.5;
        double e = 500.1;
        char f = '我';

        //
        dos.writeByte(a);
        dos.writeShort(b);
        dos.writeInt(c);
        dos.writeFloat(d);
        dos.writeDouble(e);
        dos.writeChar(f);

        //刷新
        dos.flush();
        //关闭最外层
        dos.close();

        /*
        * DataInputStream :数据字节输入流
        * DataOutputStream写的文件,只能使用DataInputStream去读,并且读的时候需要提前知道写入的顺序
        * 读的顺序和写的顺序一样,才能正常取出数据
        *
        * */
        DataInputStream dis = new DataInputStream(new FileInputStream("data"));
        byte a1 = dis.readByte();
        short a2 = dis.readShort();
        int a3 = dis.readInt();
        float a4 = dis.readFloat();
        double a5 = dis.readDouble();
        char a6 = dis.readChar();

        System.out.println(a1);
        System.out.println(a2);
        System.out.println(a3);
        System.out.println(a4);
        System.out.println(a5);
        System.out.println(a6);

4、标准输出流

/*
        * java.io.PrintStream   标准的字节输出流,默认输出到控制台
        *
        *
        * */
        //联合起来写
        System.out.println("hello world");
        //分开写
        PrintStream ps = System.out;
        ps.println("hello zhangshan");
        ps.println("hello lisi");
        ps.println("hello wangwu");

        //标准输出流不需要手动close()关闭
        //可以改变标准输出流的输出方向吗? 可以
      /* System.gc();
       System.currentTimeMillis();
       PrintStream ps1 = System.out;
       System.exit(0);
       System.arraycopy(...);*/

        // 标准输出流不再指向控制台,指向“log"文件
        PrintStream printStream = new PrintStream(new FileOutputStream("log"));
        //  修改输出方向,将输出方向修改到"log"文件
        System.setOut(printStream);
        //再输出
        System.out.println("hello world");
        System.out.println("hello kiite");
        System.out.println("hello zhangshan");

 

posted @ 2022-01-25 23:05  zhustarstar  阅读(42)  评论(0编辑  收藏  举报