You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:27:10