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开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
立即学习“Java免费学习笔记(深入)”;
- 目标文件路径建议用绝对路径或确保相对路径正确(如
"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();
}
反序列化读取 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();
}
替代方案:考虑 JSON 或其他格式(更通用)
Java 原生序列化有局限性(如跨语言不兼容、类结构变动易失败)。生产环境更推荐用 JSON:
- 用
Gson(Google)或Jackson库将ArrayList转为 JSON 字符串,再写入文本文件 - JSON 文件可读、跨平台、升级友好,适合配置、缓存等场景
- 示例(Gson):
new Gson().toJson(list, Files.newBufferedWriter(Paths.get("list.json")))
原生序列化适合 Java 内部短周期数据传递,长期存储或需兼容性时优先选 JSON。

















