任务描述
本关任务:序列化给定 Student 数组到给定文件中,再通过反序列化把其转化为 Student 数组。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,序列化 Student 数组到给定文件中,再通过反序列化把其转化为 Student 数组,具体要求如下:
- 接收给定的一行字符串(如:/test/a.txt 3 ,第一部分为给定文件路径,第二部分为数组长度);
- 创建 Student 数组,用于存储 Student 对象( Student 对象通过传入姓名实例化,姓名命名规则:student+n,n 从 0 开始。),最后将该数组序列化到文件中;
- 通过反序列化把文件内容转化为 Student 数组,并打印数组中 Student 对象元素的姓名。
Student 类代码如下:
import java.io.Serializable;
public class Student implements Serializable {
String name;
// 构造方法
public Student(String name){
this.name=name;
}
}
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
public class FileTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// 接收给定的数据
Scanner scanner = new Scanner(System.in);
String filedir = scanner.next();
int length = scanner.nextInt();
// 请在此编写代码
/********** Begin **********/
// 创建Student数组
Student[] students = new Student[length];
// 给数组赋值
for (int i = 0; i < length; i ++){
students[i] = new Student("student" + i);
}
// 序列化数组到文件中,通过反序列化读取文件内容,并转换为Student数组
File file = new File(filedir);
try (
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
){
for (int j = 0; j < length; j ++){
objectOutputStream.writeObject(students[j]);
// 打印数组中Student对象元素的姓名
Student student = (Student) objectInputStream.readObject();
System.out.println(student.name);
}
}
/********** End **********/
}
}