培训19天的时候老师布置了一个用序列化反序列化做学生管理系统的作业。百度没找到怎么写,后来老师写了一份,我就贴出来吧。对蠢萌蠢萌、纱布拉基的我来说真TM难
首先你的包和里面的类是跟下图这样的:Workspace
1.先写Student.java吧:
package com.ujiuye.model.vo;
import java.io.Serializable;
public class Student implements Serializable{//用序列化和反序列化流需要实现 Serializable private static final long serialVersionUID = -2899075793925437728L;//版本号
//姓名 :name ,年龄 age ,学号 stuNo,班级名称 className.
private String name;
private int age;
private String stuNo;
private String className;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public Student() {
super();
}
public Student(String name, int age, String stuNo, String className) {
super();
this.name = name;
this.age = age;
this.stuNo = stuNo;
this.className = className;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", stuNo=" + stuNo + ", className=" + className + "]";
}
}
2.然后写Test_Main.java,代码如下:
package com.ujiuye.view;
public class Test_Main {
public static void main(String[] args) {
//扫描仪
Scanner sc=new Scanner(System.in);
//dao层对象
StudentDAO s=new StudentDAOImp();
while (true) {
try {
System.out.println("欢迎进入学生管理系统,添加请按1 ,删除请按2,修改请按3,查询请按4,退出请按5");
//选择判断
String choose = sc.next();
//判断 异常的处理
if(!choose.matches("^[1-5]$")) {
throw new RuntimeException("必须输入1-5之间的数字");
}
//字符串转数字
switch (Integer.valueOf(choose)) {
case 1:
s.add();
break;
case 2:
s.delete();
break;
case 3:
s.update();
break;
case 4:
s.query();
break;
case 5:
System.exit(0);
break;//退出jvm
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
3.接口 StudentDAO.java:
package com.ujiuye.model.DAO;
public interface StudentDAO {
public void add();
public void delete();
public void update();
public void query();
}
4.重头戏 工具类 IOUtiles.java:
package com.ujiuye.utils;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.ujiuye.model.vo.Student;
public class IOUtils {
//向外读取
public static List getStudent(){
List list=null;
//判断 文件是否存在 防止文件找不到异常
File f=new File("stu.txt");
if(!f.exists()) {
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try(ObjectInputStream ois=new ObjectInputStream(new FileInputStream("stu.txt"))){
//读取
list = (List) ois.readObject();
}catch(EOFException e) {
//EOFException 第一次创建文件后,文件中没有任何内容,会报文件到达末尾异常
//第一次需要创建一个集合对象
list=new ArrayList<>();
}catch(Exception e) {
e.printStackTrace();
}
return list;
}
//向文件中写入
public static void writeStudent(List list) {
try(ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(new File("stu.txt")))){
oos.writeObject(list);
}catch(Exception e) {
e.printStackTrace();
}
}
//单元测试
@Test
public void fun() {
List list = getStudent();
System.out.println(list);
}
@Test
public void fun1() {
List list=new ArrayList<>();
list.add(new Student("zs", 18, "1001", "0226java"));
list.add(new Student("ls", 18, "1002", "0226java"));
writeStudent(list);
}
}
5.最后是StudentDAOImp.java,添加跟查询是老师写的,删除跟添加是我自己写的:package com.ujiuye.model.DAO;
import java.util.List;
public class StudentDAOImp implements StudentDAO {
@Override
public void add() {
//添加思路 : ① 读取 然后② 再进行添加
List list = IOUtils.getStudent();
//添加
Scanner sc=new Scanner(System.in);
System.out.println("请输入学生的姓名:");
String name = sc.next();
System.out.println("请输入学生的年龄:");
int age = sc.nextInt();
System.out.println("请输入学生的学号:");
String stuNo= sc.next();
System.out.println("请输入学生的班级:");
String className = sc.next();
//添加入集合
list.add(new Student(name, age, stuNo, className));
//写入文件。
IOUtils.writeStudent(list);
System.out.println("添加成功");
query();
}
@Override
public void delete() {
List list=IOUtils.getStudent();
if(list.size()==0) {
throw new RuntimeException("对不起,没有数据");
}
Scanner sc=new Scanner(System.in);
System.out.println("请输入要删除的学生信息的学号");
String stuNo=sc.next();
Iterator it=list.iterator();
while(it.hasNext()) {
if(it.next().getStuNo().equals(stuNo)) {
it.remove();
}else {
System.out.println("没有该学号的学生");
}
}
IOUtils.writeStudent(list);
System.out.println("删除成功");
query();
}
@Override
public void update() {
List list=IOUtils.getStudent();
if(list.size()==0) {
throw new RuntimeException("对不起,没有数据");
}
Scanner sc=new Scanner(System.in);
System.out.println("请输入学号");
String stuNo=sc.next();
Iterator it=list.iterator();
while(it.hasNext()) {
if(it.next().getStuNo().equals(stuNo)) {
System.out.println("请输入学生的姓名 :");
String name=sc.next();
System.out.println("请输入学生的年龄 :");
int age=sc.nextInt();
System.out.println("请输入学生的班级名称 :");
String className=sc.next();
it.remove();
list.add(new Student(name, age, stuNo, className));
IOUtils.writeStudent(list);
System.out.println("添加成功");
}else {
System.out.println("没有该学号的学生");
}
}
}
@Override
public void query() {
List list = IOUtils.getStudent();
//判断 如果集合中没有中没有元素,抛出异常返回
if(list.size()==0) {
throw new RuntimeException("对不起,没有数据,请添加后 再查询");
}
//遍历
System.out.println("姓名\t年龄\t学号\t班级名称");
for (Student student : list) {
System.out.println(student.getName()+"\t"+student.getAge()+\t"+student.getStuNo()+"\t"+student.getClassName());
}
}
}
emmm,差不多就是这样。