美文网首页
实验2---文件与IO流

实验2---文件与IO流

作者: Riya | 来源:发表于2020-02-24 13:23 被阅读0次

    一、实验目的

    本实验的目的是掌握File类的使用,完成对象序列化与反序列化。

    二、实验内容

    给定一个Student类,

    public class Student {
        private int number;
        private String name;
    }
    

    完成这个类的设计,实现数据成员的Get和Set函数编写以及toString()函数编写,编写程序多个Student对象存储在数组时以及多个Student对象存储在ArrayList数组时,使用文件实现Student对象数组和ArrayList数组的读和写操作。

    三、实验步骤

    1. 创建集合对象s(全局变量)
    2. 创建一个ObjectOutputStream对象输出流obs
    3. 创建学生对象student1,student2,student3
    4. 添加对象到集合s
    5. 利用toString() 把集合转成数组objs[]
    6. 利用tostring()函数将集合中的对象转为数组,对象的个数即为数组的长度,写一个for循环,将数组元素依次强制转换为Student对象并写入文件中。
    7. 创建一个ObjectInputStream对象输入流ois
    8. 利用全局变量集合s的大小,写一个for循环,从ObjectInputStream对象输入流中依次读取对象,并强制转换成Student对象,并依次输出各对象信息。

    四、实验结果

    五、实验小结

    这次实验的难点在于如何写两个循环,一个能够将对象依次写入文件中,另一个能够从文件中依次读取文件内容。第一个循环:利用tostring()函数将集合中的对象转为数组,对象的个数即为数组的长度,写一个for循环,将数组元素依次强制转换为Student对象并写入文件中。第二个循环:利用全局变量集合s的大小写一个for循环 ,从ObjectInputStream对象输入流中依次读取对象,并强制转换成Student对象,并依次输出各对象信息。
    这次实验还有一个需要注意的点:在写文件地址的时候,一定要仔细!差了一个空格都会导致整个文件无法读取!
    "/Users/zhuxiaoyue/Desktop/student.txt "
    ❌这样是不行的,student.txt后不能有一个空格!
    以下为正确格式:
    "/Users/zhuxiaoyue/Desktop/student.txt"

    六.附录

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.Collection;
    
    public class ObjectOutputStreamDemo {
    
      public static void main(String[] args) {
      //创建集合对象
      Collection s= new ArrayList();
      // 创建一个ObjectOutputStream对象输出流
      try (ObjectOutputStream obs = new ObjectOutputStream(new             
      FileOutputStream("/Users/zhuxiaoyue/Desktop/student.txt"))) {
      //创建学生对象
      Student student1= new Student(25, "Bob");
      Student student2= new Student(06, "Tom");
      Student student3= new Student(17, "Steven");
      //添加对象到集合
      s.add(student1);
      s.add(student2);
      s.add(student3);
      //把集合转成数组
      Object[] objs = s.toArray();
      // 把对象写入到文件中
      for(int x=0;x<objs.length;x++) {
      Student s1 =(Student)objs[x];
      obs.writeObject(s1);
      }
      obs.flush();
      System.out.println("序列化完毕!");
      } catch (Exception ex) {
          ex.printStackTrace();
      }
    // 创建一个ObjectInputStream对象输入流
    try (ObjectInputStream ois = new ObjectInputStream(new 
    FileInputStream("/Users/zhuxiaoyue/Desktop/student.txt"))) {
      System.out.println("序列化完毕!读出的对象信息如下:");
    // 从ObjectInputStream对象输入流中读取对象,并强制转换成Student对象
    for(int i=0;i<s.size();i++) 
    {
      Student s2 =(Student)ois.readObject();
      System.out.println(s2);
    }
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    }
    }
    

    Student.java

    import java.io.Serializable;
    public class Student implements Serializable{
      private int number;
      private String name;
      public Student(int number, String name) {
      super();
      this.number = number;
      this.name = name;
    }
    public int getNumber() {
      return number;
    }
    public void setNumber(int number) {
      this.number = number;
    }
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    @Override
    public String toString() {
      return "Student [number=" + number + ", name=" + name + "]";
    }
    }
    

    相关文章

      网友评论

          本文标题:实验2---文件与IO流

          本文链接:https://www.haomeiwen.com/subject/iptvqhtx.html