IO输入输出流复习笔记 传智播客java

IO的分类

在这里插入图片描述

字节的输入输出

字节输出流

FileOutputStream 输出步骤
1 创建输出流对象
2 写数据
3 释放资源

 FileOutputStream fos = new FileOutputStream("fbb.txt");
        fos.write("测试".getBytes());//可以写字节
    
        // 字节数组 和指定数组的部分内容
        fos.close();//让流对象关闭可以接着使用
             fos.write("97".getBytes());//可以写字节

进行换行操作使用\n

    for(int i=0;i<10;i++){
            fos.write(("牛逼"+i).getBytes());
            fos.write("\n".getBytes());
        }

文件追加写入

      FileOutputStream fos = new FileOutputStream("fbb.txt",true);

通过他的构造方法可以知道写true表示文件已存在从尾部写入

字节输入

在这里插入图片描述
读取步骤
1 创建字节输入流对象
2 调用read()方法读取数据显示到控制台
3 释放资源

      FileInputStream s1 = new FileInputStream("fbb.txt");
        System.out.println(s1.read());//一次读取一个字节

返回一个字节类型回来

 FileInputStream s1 = new FileInputStream("fbb.txt");
        int by =s1.read();
      while ((by=s1.read())!=-1){//因为他-1时候就是末尾
            System.out.print((char)by);
        }

用循环改进读写

复制文本文件

     FileInputStream s1 = new FileInputStream("fbb.txt");
        FileOutputStream s2= new FileOutputStream("fbb2.txt");
        int by =0;
        while ((by=s1.read())!=-1){//因为他-1时候就是末尾
            s2.write(by);//读取文本 写入进去另一个文本完成复制操作
        }

该方法不需要做转换中文不会出现问号

  FileInputStream s1 = new FileInputStream("D:\\sp_服务端.zip");//读取
        FileOutputStream s2= new FileOutputStream("D:\\测试.zip");//创建
        int by =0;
        while ((by=s1.read())!=-1){//因为他-1时候就是末尾
            s2.write(by);//读取文本 写入进去另一个文本完成复制操作
        }

案例复制压缩包

  FileInputStream s1 = new FileInputStream("D:\\sp_服务端.zip");//读取
        FileOutputStream s2= new FileOutputStream("D:\\测试.zip");//创建
        byte[]arr = new byte[1024];//每次读取10个字节
        int len = s1.read(arr);
        while (len!=-1){
            s2.write(arr);//写入数组
            len=s1.read(arr);

        }

使用数组优化速度,数组的长度一般都是1024或者是1024的整数倍

字节缓存流

BufferedOutputStream

   BufferedOutputStream buff = new BufferedOutputStream(new FileOutputStream("fbb"));
        //读取);
        buff.write("测试".getBytes());

字节缓冲区基础操作还是通过基本流对象实现

    BufferedInputStream buff=  new BufferedInputStream(new FileInputStream("fbb.txt"));
        byte[] ces = new byte[1024];
    int temp =0;
    while (temp!=-1){

        System.out.println(new String(ces,0,temp));
        temp = buff.read(ces);
    }

BufferedInputStream输入,同一个对象只能使用一个。
在这里插入图片描述

高效对比

在这里插入图片描述

字符流

字符流=字节流+编码表

转换流

输出

       OutputStreamWriter s1 = new OutputStreamWriter(new FileOutputStream("E:\\fbb.txt"),"UTF-8");

        s1.write("我嫩爹");
        s1.close();

用OutputStreamWriter一定要记得使用close否则内容会不完整

输入

    InputStreamReader s1 = new InputStreamReader(new FileInputStream("fbb2.txt"),"GBK");
    int ch = 0;
    while ((ch=s1.read())!=-1){
        System.out.println((char)ch);

    }

写入时候是什么编码那么读出时候就指定是什么编码

OutputStreamWriter的方法

在这里插入图片描述
在这里插入图片描述
写数据时候要记得刷新和关闭否则会在缓冲区导致没有写进去

InputStreamReader 的方法

在这里插入图片描述

字符缓冲流

提高效率,可以指定缓冲区大小
在这里插入图片描述

BufferedWriter输出

        BufferedWriter bw = new BufferedWriter(new FileWriter("我嫩爹.txt"));
        bw.write("哈哈哈哈");
        bw.flush();

BufferedReader 输入

        BufferedReader bw = new BufferedReader(new FileReader("我嫩爹.txt"));
        char[] cha = new char[1024];
        int ch= 0;
        while ((ch=bw.read(cha))!=-1){
            System.out.println(new String(cha,0,ch));
        }

字符缓冲流的特殊方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
readLine例子
注意:readLine是不带换行符的要带上newLine

IO小结图解

在这里插入图片描述

复制文本文件的五种案例方式

基本字符流一次读写一个字符

public static void metho(String src, String des) throws IOException {
        //基本字符流一次读写一个字符
        FileReader fr= new FileReader(src);//读入

        FileWriter s1 = new FileWriter(des);
        int ch=0;
        while((ch=fr.read())!=-1){
            s1.write(ch);
        }
        fr.close();;
        s1.close();
    }

基本字符流一次读写一个数组

    public static void metho1(String src, String des) throws IOException {
        FileReader fr= new FileReader(src);//读入

        FileWriter s1 = new FileWriter(des);
        char[]arr = new char[1024];
        int ch=0;
        while((ch=fr.read(arr))!=-1){
            s1.write(new String(arr ,0,ch));
        }
        fr.close();;
        s1.close();
    }

字符缓存流一次读写一个数组

public static void metho2(String src, String des) throws IOException {
        BufferedReader fr= new BufferedReader(new FileReader(src));//读入

        BufferedWriter s1 = new BufferedWriter(new FileWriter(des));
        char[]arr = new char[1024];
        int ch=0;
        while((ch=fr.read(arr))!=-1){
            s1.write(new String(arr ,0,ch));
        }
        fr.close();;
        s1.close();
    }

字符缓存流一次读写一个字符

    public static void metho4(String src, String des) throws IOException {
        //基本字符流一次读写一个字符
        BufferedReader fr= new BufferedReader(new FileReader(src));//读入

        BufferedWriter s1 = new BufferedWriter(new FileWriter(des));
        int ch=0;
        while((ch=fr.read())!=-1){
            s1.write(ch);
        }
        fr.close();;
        s1.close();
    }

字符缓存流一次读一行

 public static void metho5(String src, String des) throws IOException {
        //基本字符流一次读写一个字符
        BufferedReader fr= new BufferedReader(new FileReader(src));//读入

        BufferedWriter s1 = new BufferedWriter(new FileWriter(des));
        String line = null;
        while((line = fr.readLine())!=null){
            s1.write(line);
            s1.newLine();
            s1.flush();
        }
        fr.close();;
        s1.close();
    }

复制字节的四种基本案例

一次读写一个字节

    public static void metho(String src, String des) throws IOException {
        //一次读写一个字节
       FileInputStream s1 = new FileInputStream(src);
       FileOutputStream s2 = new FileOutputStream(des);
       int by = 0;
       while((by=s1.read())!=-1){
           s2.write(by);
       }
       s1.close();
       s2.close();
    }

一次读写一个字节数组

//一次读写一个字节数组
       FileInputStream s1 = new FileInputStream(src);
       FileOutputStream s2 = new FileOutputStream(des);
       byte[]arr= new byte[1024];

       int by = 0;
       while((by=s1.read(arr))!=-1){
           s2.write(arr,0,by);
       }
       s1.close();
       s2.close();

字节缓存流读取一个字节数组

    public static void metho(String src, String des) throws IOException {
    
       BufferedInputStream s1 = new BufferedInputStream(new FileInputStream(src));
       BufferedOutputStream s2 = new BufferedOutputStream(new FileOutputStream(des));
       byte[]arr= new byte[1024];

       int by = 0;
       while((by=s1.read(arr))!=-1){
           s2.write(arr,0,by);
       }
       s1.close();
       s2.close();
    }

字节缓存流读取一个字节

    public static void metho(String src, String des) throws IOException {
      
       BufferedInputStream s1 = new BufferedInputStream(new FileInputStream(src));
       BufferedOutputStream s2 = new BufferedOutputStream(new FileOutputStream(des));
 

       int by = 0;
       while((by=s1.read())!=-1){
           s2.write(by);
       }
       s1.close();
       s2.close();
    }

操作基本数据类型的流

在这里插入图片描述

在这里插入图片描述
使用例子

内存操作流

在这里插入图片描述
在这里插入图片描述
使用案例,内存操作流不需要写回收方法。

打印流

在这里插入图片描述
打印流是可以同时操作基本流和高级流
在这里插入图片描述

打印流作为子类循环的使用

在这里插入图片描述

打印流例子

在这里插入图片描述
效率相比之前更高效并且输出语句的本质就是打印流。

随机访问流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过seek方法定位指针指针定位到哪就输出哪里。

合并流

    public static void main(String[] args) throws IOException {
        InputStream s1 = new FileInputStream("fbb.txt");
        InputStream s2 = new FileInputStream("fbb2.txt");
        SequenceInputStream sis = new SequenceInputStream(s1,s2);
        //该方法可以合并多个文本数据进行处理。
      
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("测试.txt"));
        byte[]by= new byte[1024];
        int ch =0;

        while ((ch=sis.read(by))!=-1){
            bos.write(by,0,ch);
        }
        bos.close();
        sis.close();
    }

在这里插入图片描述

添加多个文件的方法
在这里插入图片描述

序列化流

具体作用就是把一个对象写到文件,然后该对象就会变成流一样在文件中存储。将来还可以通过他把该对象还原
在这里插入图片描述

序列化步骤

在这里插入图片描述
读就叫序列化,写就叫反序列化
在这里插入图片描述

1 创建序列化对象
2 创建要序列化的对象
3 写序列化
4 释放资源
在这里插入图片描述
类要实现该接口才能启用序列化功能
在这里插入图片描述
该接口没有任何的方法,只是做一个标记的功能。

反序列号步骤

在这里插入图片描述

1 创建反序列化对象
2 还原对象
3 释放资源
4 输出对象
在这里插入图片描述
在这里插入图片描述
使用关键字让他不会被序列化

Properties的使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Properties的特殊功能

在这里插入图片描述

Properties和IO流的结合使用

他可以直接把文本数据中的键值对存到集合中
他会自动处理切割到集合中
在这里插入图片描述
把集合中的数据存储到文件
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值