使用ArrayList将对象保存至txt文件及其读取

定义实体类

import java.io.Serializable;

public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    int Customer;
    String name;
    String phone;
    String email;
    int postcode;

    public User() {
    }

    public User(int customer, String name, String phone, String email, int postcode) {
        Customer = customer;
        this.name = name;
        this.phone = phone;
        this.email = email;
        this.postcode = postcode;
    }

    public int getCustomer() {
        return Customer;
    }

    public void setCustomer(int customer) {
        Customer = customer;
    }

    public String getName() {
        return name;
    }

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

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getPostcode() {
        return postcode;
    }

    public void setPostcode(int postcode) {
        this.postcode = postcode;
    }

    @Override
    public String toString() {
        return "Customer=" + Customer +
                ", name='" + name + '\'' +
                ", phone='" + phone + '\'' +
                ", email='" + email + '\'' +
                ", postcode=" + postcode;
    }
}

定义实体类时要特别注意

一定要实现Serializable接口

  1. 什么是Serializable接口?
    一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。
  2. 什么是序列化?
    序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
  3. 为什么要定义serialversionUID变量
    在分布式部署的应用中,可能会存在漏掉一两台设备的服务器代码没有及时更新,因此这两台设备中类的serialVersionUID可能存在不同。如果版本号不显示定义,则serialVersionUID则会不同,网络传输或者数据读取时,反序列化就会出现问题。

保存文件

public void SaveFile(List<User> users,String filename) throws IOException {

        File file = new File(filename);
        //创建文件输出流
        FileOutputStream fos = new FileOutputStream(file);
        //创建对象输出流
        ObjectOutputStream oos =new ObjectOutputStream(fos);
        //保存对象
        oos.writeObject(users);
    }

读取文件

public ArrayList<User> loadFile(String filename) throws IOException, ClassNotFoundException {//file 为写入的文件

        File file = new File(filename);
        if(file.length()>0) {
            //创建文件输入流
            FileInputStream fis = new FileInputStream(file);
            //创建对象输入流
            ObjectInputStream ois = new ObjectInputStream(fis);
            //读取文件中的对象
            ArrayList<User> h2 = (ArrayList<User>) ois.readObject();
            //遍历list
            for (int i = 0; i < h2.size(); i++) {
                System.out.println(h2.get(i));
            }
            System.out.println("success");
            return h2;
        }else {
            //第一次添加时文件为空,返回空值
            System.out.println("null");
            return null;
        }
    }
posted @ 2022-02-10 19:06  又一岁荣枯  阅读(595)  评论(0编辑  收藏  举报