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

如何将Java用户注册程序的用户数据存储到TXT文件?

将用户数据持久化到TXT文件的实现方案

现有代码

Main.java

package face;
import java.util.Scanner;

public class Main
{
    public static void main (String[]args) throws Exception
    {
  Scanner sc=new Scanner(System.in);
    int choice;
            SignUp m = new SignUp();
         while (true) {
                System.out.
                        println("1)Customer Sign-up\n2)Customer signin\n3)Stop Program");
                choice = sc.nextInt();
                switch (choice) {
                    case 1:
                        m.customerSignUp();
                        break;
                    case 2:
                        m.customerSignin();
                        break;
                    case 3:
                        m.saveUsersToTxt(); // 程序退出前保存数据
                        System.exit(0);
                }
        }
    }
}

SignUp.java

package face;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Scanner;

public class SignUp implements Serializable {

    Scanner sc = new Scanner(System.in);

    ArrayList<User> customer = new ArrayList<User>();
    Home home = new Home();
    
    // 初始化时加载已保存的用户数据
    public SignUp() {
        loadUsersFromTxt();
    }

    void customerSignUp() {
        System.out.println("Enter the details to sign-up");
        System.out.println("Enter the id");
        int id = sc.nextInt();
        System.out.println("enter the name");
        String name = sc.next();
        System.out.println("enter the pass");
        String pass = sc.next();
        System.out.println("Enter the age");
        int age = sc.nextInt();
        System.out.println("Enter the gender");
        String gender = sc.next();
       
        int d = 0;
        if (customer.size() > 1) {
            for (User c : customer) {
                if (c.id == (id)) {
                    d++;
                }
            }
        }
        if (d== 0) {
            customer.add(new User(id, name, pass, age, gender));
            saveUsersToTxt(); // 注册后保存数据
            System.out.println("Back to home page");
        } else {
            System.out.println("User id already exist");
        }
    }

    void customerSignin() {
        System.out.println("Enter id: ");
        int id = sc.nextInt();
        System.out.println("password to Login:");
        String pass = sc.next();
        int f = 0;
       User currcustomer = null;
        for (User c : customer) {
            if (c.id == (id) && c.password.equals(pass)) {
                currcustomer = c;
                f++;
                break;
            }
        }
        if (f == 0) {
            System.out.println("Invalid Login or Password");
        } else {
            System.out.println("Logined Successfully...\nWelcome " + currcustomer.name + "\nage " + currcustomer.age
                    + "\ngender " + currcustomer.gender);
            home.enterHome(currcustomer);
        }
    }

    public void view() {
        System.out.println("Enter the user name");
        String name = sc.next();
        for (User c : customer) {
            if (name.equals(c.name)) {
                System.out.println("you found the user" + c.name + "\nage " + c.age + "\ngender " + c.gender);
                break;
            } else {
                System.out.println("user name not found");
            }
        }
    }

    public void viewAll(User user) {
        if (customer.size() > 1) {
            for (User c : customer) {
                if (c.id != user.id)
                    System.out.println("User: " + c.name + "\nId: " + c.id + "\nage " + c.age + "\ngender " + c.gender);
            }
            System.out.println("Do you like to raise a friend request to an account? \n1.Yes  2.No");
            int yes = sc.nextInt();
            if (yes == 1) {
                System.out.println("Enter the account Id to whom you want to raise request:");
                int requesterId = sc.nextInt();
                raiseRequest(requesterId, user);
            }
        } else {
            System.out.println("There are no users yet other than u");
        }
    }

    public void viewParticularAccount(User user, int targetId) {
        User targetUser = null;
        for (User c : customer) {
            if (c.id != user.id && c.id == targetId) {
                System.out.println("You are visiting: " + c.name + "\nage " + c.age + "\ngender " + c.gender);
                targetUser = c;
            }
        }
        if (targetUser != null) {
            System.out.println("Do you like to raise a friend request to an account? \n1.Yes  2.No");
            int yes = sc.nextInt();
            if (yes == 1) {
                System.out.println("Enter the account Id to whom you want to raise request:");
                int requesterId = sc.nextInt();
                raiseRequest(requesterId, user);
            }
            if (yes == 2) {
                System.out.println("Do you like to check the mutual friends list of this account? \n1.Yes 2.No");
                int showMutualview = sc.nextInt();
                if (showMutualview == 1) {
                    showMutualFriends(user, targetUser);
                }
            }
        } else {
            System.out.println("There are no users with the given Id :-) ");
        }
    }

    public void raiseRequest(int requesterId, User user) {
        for (User c : customer) {
            if (c.id == requesterId) {
                c.requesters.add(user);
            }
        }
    }

    public void showMutualFriends(User user, User targetUser) {
        for (User u : customer) {
            if (user.friends.contains(u) && targetUser.friends.contains(u)) {
                System.out.println("User : " + u.name + "\nage " + u.age + "\ngender " + u.gender);
            }
        }
    }

    // 新增:将用户数据写入TXT文件(明文格式)
    public void saveUsersToTxt() {
        try (java.io.BufferedWriter writer = new java.io.BufferedWriter(new java.io.FileWriter("users.txt"))) {
            for (User user : customer) {
                // 用逗号分隔字段,若输入含逗号需转义,此处假设输入无逗号
                String line = user.id + "," + user.name + "," + user.password + "," + user.age + "," + user.gender;
                writer.write(line);
                writer.newLine();
            }
        } catch (java.io.IOException e) {
            System.out.println("保存用户数据失败:" + e.getMessage());
        }
    }

    // 新增:从TXT文件加载用户数据
    public void loadUsersFromTxt() {
        java.io.File file = new java.io.File("users.txt");
        if (!file.exists()) {
            return; // 文件不存在则跳过加载
        }
        try (java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.FileReader(file))) {
            String line;
            while ((line = reader.readLine()) != null) {
                String[] parts = line.split(",");
                if (parts.length == 5) {
                    int id = Integer.parseInt(parts[0]);
                    String name = parts[1];
                    String pass = parts[2];
                    int age = Integer.parseInt(parts[3]);
                    String gender = parts[4];
                    customer.add(new User(id, name, pass, age, gender));
                }
            }
        } catch (java.io.IOException | NumberFormatException e) {
            System.out.println("加载用户数据失败:" + e.getMessage());
        }
    }
}

补充User类(需实现Serializable)

package face;

import java.io.Serializable;
import java.util.ArrayList;

public class User implements Serializable {
    public int id;
    public String name;
    public String password;
    public int age;
    public String gender;
    public ArrayList<User> friends = new ArrayList<>();
    public ArrayList<User> requesters = new ArrayList<>();

    public User(int id, String name, String password, int age, String gender) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.age = age;
        this.gender = gender;
    }
}

实现说明

  • 明文存储逻辑:每个用户数据占一行,字段用逗号分隔,可直接用文本编辑器查看和修改。若用户输入可能包含逗号,需对字段做转义处理(比如用双引号包裹字段)。
  • 自动持久化时机:在SignUp构造方法中加载历史数据,确保程序启动时恢复之前的用户列表;用户注册成功后、程序退出前调用保存方法,保证数据不会丢失。
  • 资源安全:使用try-with-resources语法,自动关闭文件流,避免资源泄漏。
  • 异常处理:捕获文件IO和格式转换异常,输出错误提示,防止程序崩溃。

可选:二进制序列化存储方案

若不需要可读的TXT格式,可采用二进制序列化方式直接保存整个用户列表对象,代码如下:

// 序列化保存用户数据
public void saveUsersToFile() {
    try (java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(new java.io.FileOutputStream("users.dat"))) {
        oos.writeObject(customer);
    } catch (java.io.IOException e) {
        System.out.println("保存用户数据失败:" + e.getMessage());
    }
}

// 反序列化加载用户数据
@SuppressWarnings("unchecked")
public void loadUsersFromFile() {
    java.io.File file = new java.io.File("users.dat");
    if (!file.exists()) {
        return;
    }
    try (java.io.ObjectInputStream ois = new java.io.ObjectInputStream(new java.io.FileInputStream(file))) {
        customer = (ArrayList<User>) ois.readObject();
    } catch (java.io.IOException | ClassNotFoundException e) {
        System.out.println("加载用户数据失败:" + e.getMessage());
    }
}

此方案无需手动处理字段拼接,但生成的文件为二进制格式,无法直接编辑查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:01:17