02_序列化与反序列化(集合存学生,去重,序列再反序列)

package test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Scanner;

/*  1.定义学生类,包含姓名(String name),性别(String gender),年龄(int age)三个属性,
    生成空参有参构造,set和get方法,toString方法
    2.键盘录入6个学员信息(录入格式:张三,男,25),要求有两个相同的信息,
    将6个学员信息存入到ArrayList集合中
    3.将存有6个学员信息的ArrayList集合对象写入到D:\\StudentInfo.txt文件中
    4.读取D:\\StudentInfo.txt文件中的ArrayList对象并遍历打印
    5.对ArrayList集合中的6个学生对象进行去重,将去重后的结果利用PrintWriter流写入到
    E:\\StudentInfo.txt文件中(写入格式:张三-男-25)
*/
/**
 * 学生类
 * @author mingming
 * @version v1.0
 */
class NewStudent implements Serializable {
    private static final long serialVersionUID = 5263607791087489049L;
    private String name;
    private String gender;
    private String age;
    
    public NewStudent(String name, String gender, String age) {
        super();
        this.name = name;
        this.gender = gender;
        this.age = age;
    }
    
    public NewStudent() {
        super();

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", gender=" + gender + ", age=" + age + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((age == null) ? 0 : age.hashCode());
        result = prime * result + ((gender == null) ? 0 : gender.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        NewStudent other = (NewStudent) obj;
        if (age == null) {
            if (other.age != null)
                return false;
        } else if (!age.equals(other.age))
            return false;
        if (gender == null) {
            if (other.gender != null)
                return false;
        } else if (!gender.equals(other.gender))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
}

public class Test12 {
    public static void main(String[] args) {
        // 创建集合存储学生信息
        ArrayList<NewStudent> list = new ArrayList<>();
        //存入学生数据
        storage(list);
        // 序列化,将数据写入硬盘文件中
        //serilize(list);
        // 反序列化
        //disSerilize();
        //去重存储
        reStorage(list);
    }
    /**
     * 对ArrayList集合中的6个学生对象进行去重,将去重后的结果利用PrintWriter流写入到
     * h:\\a\\StudentInfo.txt文件中
     * @param list 存储学生的集合
     */
    private static void reStorage(ArrayList<NewStudent> list) {
        ArrayList<NewStudent> newList=new ArrayList<>();
        for (NewStudent s : list) {
            if(!newList.contains(s)){
                newList.add(s);
            }
        }
		/*for (NewStudent student : newList) {
			System.out.println(student.getName());
		}*/
        //将去重后的学生信息通过打印流写入到文件
        try {
            PrintStream ps=new PrintStream("h:\\a\\StudentInfo.txt");
            for(NewStudent s:newList){
                ps.println(s.getName()+"-"+s.getGender()+"-"+s.getAge());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    /**
     * 反序列化,将文件中存储的集合中的学生信息打印出来
     */
    private static void disSerilize() {
        try {
            ObjectInputStream ois=new ObjectInputStream(new FileInputStream("h:\\StudentInfo.txt"));
            Object obj=ois.readObject();
            if(obj instanceof ArrayList){
                ArrayList list=(ArrayList)obj;
                for (Object object : list) {
                    if(object instanceof NewStudent){
                        NewStudent s=(NewStudent)object;
                        System.out.println("姓名:"+s.getName()+"  性别:"+s.getGender()+"  年龄:"+s.getAge());
                    }

                }
            }

            ois.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 序列化
     * @param list  序列化对象      
     */
    private static void serilize(ArrayList<NewStudent> list) {
        try {
            ObjectOutputStream ops = new ObjectOutputStream(new FileOutputStream("h:\\StudentInfo.txt"));
            ops.writeObject(list);
            ops.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 存入学生数据
     * @param list  存储集合
     */
    private static void storage(ArrayList<NewStudent> list) {
        // 键盘录入
        Scanner sc = new Scanner(System.in);
        // NewStudent s = null;
        String name = null;
        String gender = null;
        String age = null;
        for (int x = 1; x <= 6; x++) {
            System.out.println("请输入第" + x + "个学生的信息:");
            System.out.print("姓名:");
            name = sc.nextLine();
            System.out.print("性别:");
            gender = sc.nextLine();
            System.out.print("年龄:");
            age = sc.nextLine();

            NewStudent s = new NewStudent(name, gender, age);
            list.add(s);
        }
    }
}

posted @ 2021-07-18 22:06  我是多多  阅读(145)  评论(0)    收藏  举报