java中将arraylist序列化保存到本地文件,核心是让元素类实现serializable接口并用objectoutputstream写入;例如person类需声明serialversionuid,再通过try-with-resources调用writeobject(list)存为persons.ser文件。

Java 中将 ArrayList 序列化保存到本地文件,核心是让集合中的元素类型实现 Serializable 接口,再用 ObjectOutputStream 写入文件。
确保 ArrayList 中的元素可序列化
这是前提。如果 ArrayList 存的是自定义对象(比如 Person),该类必须显式实现 Serializable 接口:
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getter/setter 省略
}
注意:serialVersionUID 建议显式声明,避免反序列化时因类版本不一致报错;基本类型、字符串、常见集合(如 String、Integer、ArrayList)本身已实现接口,无需额外处理。
使用 ObjectOutputStream 写入文件
创建输出流并调用 writeObject() 即可。推荐用 try-with-resources 自动关闭流:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 目标文件路径建议用绝对路径或确保相对路径正确(如
"data/list.ser") - 文件扩展名无强制要求,但常用
.ser表示序列化文件 - 若写入失败(如目录不存在、无权限),会抛出
IOException,需捕获处理
ArrayList<person> list = new ArrayList();
list.add(new Person("张三", 25));
list.add(new Person("李四", 30));
try (FileOutputStream fos = new FileOutputStream("persons.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(list);
System.out.println("ArrayList 已序列化保存成功");
} catch (IOException e) {
e.printStackTrace();
}</person>
反序列化读取 ArrayList(顺带验证)
保存后如需读回,用 ObjectInputStream,注意强转类型,并处理 ClassNotFoundException:
try (FileInputStream fis = new FileInputStream("persons.ser");
ObjectInputStream ois = new ObjectInputStream(fis)) {
ArrayList<person> loadedList = (ArrayList<person>) ois.readObject();
System.out.println("读取成功:" + loadedList.size() + " 个对象");
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}</person></person>
替代方案:考虑 JSON 或其他格式(更通用)
Java 原生序列化有局限性(如跨语言不兼容、类结构变动易失败)。生产环境更推荐用 JSON:
- 用
Gson(Google)或Jackson库将ArrayList转为 JSON 字符串,再写入文本文件 - JSON 文件可读、跨平台、升级友好,适合配置、缓存等场景
- 示例(Gson):
new Gson().toJson(list, Files.newBufferedWriter(Paths.get("list.json")))
原生序列化适合 Java 内部短周期数据传递,长期存储或需兼容性时优先选 JSON。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










