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

Java中如何让ArrayList保留历次控制台输入的内容?

问题解答

当前的代码无法实现跨运行保存ArrayList内容。

原因

Java程序每次启动都会创建全新的JVM进程,静态集合listNames和listIds仅存在于当前进程的内存中。当程序运行结束、进程退出后,内存中的所有数据会被释放,下次启动程序时会重新初始化这两个空集合,因此只能保留本次运行的输入内容。

解决方法

要实现跨运行保存数据,必须将数据持久化到磁盘(比如文件、数据库),每次程序启动时先从持久化介质加载历史数据,新增数据后再写回介质。下面是基于文件持久化的修改示例:

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class User {
    // 定义持久化文件路径
    private static final String DATA_FILE = "user_data.txt";
    private static List<String> listNames = new ArrayList<>();
    private static List<Integer> listIds = new ArrayList<>();

    // 用户字段
    private int ID;
    private String name;

    public static void main(String[] args) {
        // 启动时加载历史数据
        loadDataFromFile();

        int tempID = 5000;
        if (args.length > 0) {
            tempID = Integer.parseInt(args[0]);
        }
        System.out.println("Login  " + tempID);

        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter your Name : ");
        String tempName = scanner.nextLine();

        User n = new User();
        n.ID = tempID;
        n.name = tempName;
        listIds.add(n.ID);
        listNames.add(n.name);

        // 保存更新后的数据到文件
        saveDataToFile();

        // 验证:打印当前所有数据
        System.out.println("当前所有用户数据:");
        for (int i = 0; i < listIds.size(); i++) {
            System.out.printf("ID: %d, Name: %s%n", listIds.get(i), listNames.get(i));
        }
    }

    // 从文件加载数据
    private static void loadDataFromFile() {
        File file = new File(DATA_FILE);
        if (!file.exists()) {
            return;
        }
        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = reader.readLine()) != null) {
                // 按逗号分隔ID和Name
                String[] parts = line.split(",");
                if (parts.length == 2) {
                    listIds.add(Integer.parseInt(parts[0]));
                    listNames.add(parts[1]);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 将数据写入文件
    private static void saveDataToFile() {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(DATA_FILE))) {
            for (int i = 0; i < listIds.size(); i++) {
                writer.write(listIds.get(i) + "," + listNames.get(i));
                writer.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

说明

  • 程序启动时会读取user_data.txt文件中的历史数据,加载到集合中
  • 新增用户数据后,会把所有用户数据(历史+新增)写入文件
  • 每次运行程序,都会保留之前所有输入的内容

内容的提问来源于stack exchange,提问作者LittleLamb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:45:54