IO流复习

IO流

在这里插入图片描述

**

1输入输出流分类

按数据流的方向不同可以分为 输入流和输出流
按照处理数据单位不同可以分为 字节流和字符流
按照功能不同可以分为 节点流和处理流
**
字节流:最原始的一个流,读出来的数据就是010101这种最底层的数据表示形式,只不过它是按
照字节来读的,一个字节(Byte)是8位(bit)读的时候不是一个位一个位的来读,而是一个字节
一个字节来读。
字符流:字符流是一个字符一个字符地往外读取数据。一个字符是2个字节

输入输出流是相对于内存而言的。当你写文件时实际上是从内存到磁盘,就相当于从内存输出了。当你读文件时实际上是从磁盘读入到内存,就是从磁盘向内存输入了

输入流

在这里插入图片描述

输出流

在这里插入图片描述

一 字节流

文件输入流读取ABC.txt 一次读一个字节

       //  1 一次读取一个字节
        FileInputStream f=new FileInputStream("src\\a.txt");
        int len=f.read();// FileInputStream的 int read()方法读取文件第一个字返回
        System.out.println(len);//  int,A==65
        System.out.println(f.read());//66
        System.out.println(f.read());//67
        System.out.println(f.read());//读到文件末尾返回-1
        f.close();//关闭此文件输入流并释放与流相关联的任何系统资源。

输出语句太多了,优化

  FileInputStream f=new FileInputStream("src\\a.txt");
      int len=0;//记录读取的字节
        while ((len=f.read())!=-1){
            System.out.println((char) len);//输出ABC
        }

一次读多个字节ABCD.txt

FileInputStream f2=new FileInputStream("src\\b.txt");
     byte[] bytes=new byte[4];//4个
     int len = f2.read(bytes);
    System.out.println(len);//4
    System.out.println(Arrays.toString(bytes));
    //  String(char[] value)字符数组转换为字符串
    System.out.println(new String(bytes));//  字节数组转为字符串 ABCD
    f2.close();

## 文件输出流写入
一次写入一个字节

        FileOutputStream fos=new FileOutputStream("src\\a.txt");//默认相对路径:JAVAse文件夹
        fos.write(97);//写入
        fos.close();//关闭

一次写入多个字节

    FileOutputStream fos2=new FileOutputStream(new File("src\\b.txt"));//默认相对路径:JAVAse文件夹
        byte[] b={65,66,67,68};//ABCD
       // public void write(byte[] b,int off,int len) off数组开始,len写几个字节
        fos2.write(b,1,2);//BC
        fos2.close();

在文件后 你好1 续写,不覆盖

 FileOutputStream fos3=new FileOutputStream("src\\c.txt",true);//不覆盖重写,续写
        for (int i=0;i<2;i++){
            //一个字符串转化为一个字节数组byte[]的方法
            String a="你好2";
            fos3.write(a.getBytes());//使用默认字符编码为 byte 序列,并将结果存储到一个新的byte数组中。
            fos3.write("\r\n".getBytes());// \r--输入光标回到行的开头,\n-换行
        }
        fos3.close();

输出
你好1
你好2
你好2

二 字符流

FileWriter字符输出流

        FileWriter fw=new FileWriter("src\\d.txt");
        fw.write(97);
        //使用FileWrite中flush方法,把内存缓冲区数据 刷新到磁盘文件
//        fw.flush();
        fw.close();//close()方法也可以flush()刷新。 不过close()之后,不能再写

FileReader字符输出流

        读取单字符
        FileReader fr=new FileReader("src\\c.txt");
        int len=0;
        while ((len=fr.read())!=-1){
            System.out.print((char)len);
        }

一次读取多个字符,字符读入数组 读出
你好1
你好2
你好2

    char[] cs=new char[1024];
        int len=0;
        while ((len=fr.read(cs))!=-1){
           /* String类构造方法
           String(char[] value)字符数组转换为字符串
           String(char[] value,int offset,int count)字符数组转换为字符串,开始索引,总数
           * */
            System.out.println(new String(cs,0,len));
        }
        //释放资源
        fr.close();

三 文件复制

将c盘下ph中a.txt复制到jv里

 FileInputStream f1=new FileInputStream("c:\\ph\\w.jpg");//输入流,读取数据源
        FileOutputStream f2=new FileOutputStream("c:\\jv\\w.jpg");//输出流,写入数据源。
        int len=0;
        while ((len=f1.read())!=-1){
          f2.write(len);//写入

        }
        //释放资源(先关写,后关读)写完了肯定读完了。
        f2.close();
        f1.close();

四 Object流 序列化,反序列化

对象的序列化:把对象写入文件
对象的反序列化流 把文件中保存的对象,流的方式读取出来

例:将Person的对象序列化到txt文件,再用反序列化读出来输出。

@Data
public class Person implements Serializable {
    /**序列化为编译后Person.class生成序列号。修改类定义,生成新的序列号
     * 解决:手动添加序列号static final long serialVersionUID */
    private static final long serialVersionUID=1L;//常量,序列号不会随着类变而变
    private String name;
    public int age;}

测试

  public static void main(String[] args) throws IOException, ClassNotFoundException {
        ArrayList<Person> list=new ArrayList<>();
        list.add(new Person("王",18));
        list.add(new Person("李",19));
        list.add(new Person("张",20));
        //序列化流对象
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("src\\list.txt"));
        oos.writeObject(list);//序列化
        //反序列化对象
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("src\\list.txt"));
        Object o=ois.readObject();//读取到集合
        ArrayList<Person> list2= (ArrayList<Person>) o;
        for (Person p:list2) {
            System.out.println(p);
        }
        oos.close();
        ois.close();

    }

输出
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 期末复习资料包括以下几个方面: 1. Java基础知识:掌握Java的基本语法、数据类型、运算符、流程控制语句等。 2. 面向对象编程:掌握Java的面向对象编程思想、类与对象、封装、继承、多态、抽象类和接口等。 3. 异常处理:掌握Java中的异常处理机制,包括异常类的层次结构、异常处理语句(try-catch-finally)、throw和throws关键字等。 4. 集合框架:掌握Java中的集合框架,包括List、Set、Map等集合容器,以及它们的特点和使用方法。 5. IO流:掌握Java中的IO流,包括字节流和字符流,文件操作等。 6. 多线程编程:掌握Java中的多线程编程,包括线程的创建和启动、线程同步、线程间通信等。 7. 数据库编程:掌握Java中的数据库编程,包括JDBC API的使用、连接数据库、执行SQL语句等。 以下是一些Java期末复习资料的推荐: 1. 《Head First Java》:这是一本非常适合初学者入门的Java书籍,内容浅显易懂,同时又不失深度,适合用来巩固Java基础知识。 2. 《Java核心技术》:这是一本全面深入的Java教材,可以帮助你系统地学习Java的各种知识点,适合用来提高Java技能水平。 3. 《Java编程思想》:这是一本讲述Java编程思想和技巧的经典书籍,涵盖了Java的基础知识、面向对象编程、异常处理、集合框架、IO流、多线程编程和数据库编程等方面的内容。 4. MOOC网站上的Java课程:例如中国大学MOOC网站上的《Java程序设计》和Coursera网站上的《Java程序设计与软件工程专项课程》,这些课程都提供了免费的在线学习资源和相关练习。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值