使用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
接口
- 什么是Serializable接口?
一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。 - 什么是序列化?
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。 - 为什么要定义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;
}
}