实验2---文件与IO流

2020-02-24  本文已影响0人  Riya

一、实验目的

本实验的目的是掌握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 + "]";
}
}
上一篇 下一篇

猜你喜欢

热点阅读