Java如何持久化存储运行期录入数据实现程序重启后可查询展示
实现持久化存储方案
你当前的数据全部存在内存中的ArrayList集合里,程序终止后内存被系统回收,重启自然读不到之前录入的数据。只需要加一层本地文件读写逻辑,就能实现重启后数据保留,不需要引入任何第三方依赖,直接在现有代码上修改即可。
修改步骤
1. People类无需改动
你现有的People.java代码完全满足需求,不需要做任何调整。
2. 替换Program类代码
把原有Program.java的内容替换为以下代码,核心改动是新增了启动时加载本地文件历史数据、新增/退出时保存数据到本地文件的逻辑:
// program.java package com.example; import java.util.ArrayList; import java.util.Scanner; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; import java.io.BufferedWriter; public class Program { // 数据持久化存储文件,和src目录同级,IntelliJ中可直接查看编辑 private static final String STORAGE_PATH = "deathnote.txt"; public static void main(String[] args) { // 程序启动第一步:加载本地存储的历史数据 ArrayList<People> Person = loadHistoryData(); Scanner input = new Scanner(System.in); while (true) { System.out.println(""" *Death Note* [1] Show List [2] Write New Name [3] Exit Type: """); String izbor = input.nextLine(); if (izbor.equals("1")) { if (Person.isEmpty()) { System.out.println("当前没有录入任何数据"); continue; } for (int i = 0; i < Person.size(); i++) { System.out.println(Person.get(i)); } } else if (izbor.equals("2")) { People o = new People(); System.out.println("Name: "); o.setname(input.nextLine().trim()); System.out.println("Surname: "); o.setsurname(input.nextLine().trim()); Person.add(o); // 新增数据后立刻写入磁盘,避免异常退出丢数据 saveDataToFile(Person); System.out.println("录入完成"); } else if (izbor.equals("3")) { // 退出前兜底保存一次数据 saveDataToFile(Person); System.out.println("程序已退出"); break; } else { System.err.println("无效输入,请重新选择"); } } input.close(); } // 从本地文件加载历史数据 private static ArrayList<People> loadHistoryData() { ArrayList<People> dataList = new ArrayList<>(); File storageFile = new File(STORAGE_PATH); // 文件不存在说明是第一次运行,直接返回空列表 if (!storageFile.exists()) { return dataList; } try { List<String> lines = Files.readAllLines(Paths.get(STORAGE_PATH), StandardCharsets.UTF_8); for (String line : lines) { // 跳过空行避免格式错误 if (line.isBlank()) continue; // 按逗号分割姓名和姓氏,和写入格式严格对应 String[] nameParts = line.split(",", 2); if (nameParts.length == 2) { dataList.add(new People(nameParts[0], nameParts[1])); } } } catch (IOException e) { System.err.println("读取历史数据出错:" + e.getMessage()); } return dataList; } // 把当前全量数据写入本地文件 private static void saveDataToFile(ArrayList<People> personList) { try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(STORAGE_PATH), StandardCharsets.UTF_8)) { for (People person : personList) { // 每行存储一条数据,姓名和姓氏用逗号分隔 writer.write(person.getname() + "," + person.getsurname()); writer.newLine(); } } catch (IOException e) { System.err.println("保存数据出错:" + e.getMessage()); } } }
IntelliJ运行注意事项
- 第一次运行录入数据后,你可以在IntelliJ左侧项目面板里,找到和
src文件夹同级的deathnote.txt文件,所有录入的数据都存在这里,直接打开就能查看、编辑 - 如果要清空所有历史数据,直接删除这个txt文件,或者打开文件清空内容即可
- 注意:录入新数据后只要控制台打印了「录入完成」,数据就已经写入磁盘,就算直接点IDEA的红色停止按钮强制关闭程序,下次启动数据也不会丢失
内容的提问来源于stack exchange,提问作者Array and Problems
相关产品推荐
相关产品推荐

