gpt4 book ai didi

java - 序列化对象被覆盖,而不是添加到

转载 作者:行者123 更新时间:2023-12-01 13:37:52 25 4
gpt4 key购买 nike

我正在尝试将用户帐户信息存储到一个单独的文本文件中,经过多次尝试我已经完成了......

但是,每次我创建新用户时,它都会覆盖最后放入文件中的用户。另外,唯一存储的是字符串,我有一个 PIN 码和一个帐户余额,稍后我将需要它们,这非常重要。

这是我到目前为止所遇到的,我相信问题是每次我运行代码时都会创建一个名为用户的Object,并且由于它不是动态的,所以每次都会覆盖自己.

在序列化任何东西方面我都是菜鸟,所以如果你能用最简单的术语解释问题,那就太棒了!

我的目标是能够存储每个新用户帐户,如果帐户信息与 PIN 码和用户名匹配,则稍后返回将其显示给用户

public class ATM implements Serializable {

public static void main(String[] args) {

// variables
String dash = "-------------------\n";
int accounts = 0;

// Scanner
Scanner scanner = new Scanner(System.in);

// Welcome screen
System.out.print(dash);
System.out.print("Welcome to the Bank\n");
System.out.print(dash);

System.out.println("Do you have an account with us? (y/n) ");

String answer = scanner.nextLine();

if (answer.equalsIgnoreCase("y")) {

} else {

// new user is created
Bank bank = new Bank();

accounts++;

System.out
.println("Enter your full name below (e.g. John M. Smith): ");
String name = scanner.nextLine();
System.out.println("Create a username: ");
String userName = scanner.nextLine();
System.out.println("Enter your starting deposit amount: ");
int balance = scanner.nextInt();

System.out.print(dash);
System.out.print("Generating your information...\n");
System.out.print(dash);

int pin = bank.PIN();
String accountNum = bank.accountNum();

String id = name + accountNum;

User user = new User(name, userName, pin, accountNum, balance);

// new user gets added to the array list
Bank.users.add(user);

String test = "Test989898998";

System.out.println(user);

try {
FileOutputStream fileOut = new FileOutputStream("users.txt");

ObjectOutputStream out = new ObjectOutputStream(fileOut);

out.writeObject(Bank.users);
out.close();
fileOut.close();

} catch (IOException i) {
i.printStackTrace();
}
}

}

}

银行类别

public class Bank implements Serializable {

//Generate a random 16 digit bank account number
public String accountNum() {

int max = 9999;
int min = 1000;

int a1 = (int) (Math.random() * (max - min) + min);
int a2 = (int) (Math.random() * (max - min) + min);
int a3 = (int) (Math.random() * (max - min) + min);
int a4 = (int) (Math.random() * (max - min) + min);

String accountNum = a1 + "-" + a2 + "-" + a3 + "-" + a4;

return accountNum;
}

//Generate a random 4 digit PIN
public int PIN() {

int max = 9999;
int min = 1000;

int PIN = (int) (Math.random() * (max - min) + min);

return PIN;
}

//array list for users
static ArrayList<User> users = new ArrayList<User>() {

};

}

用户类别

public class User implements Serializable{

String name;
String userName;
String accountNum;
int pin;
int balance;

public User (String name, String userName, int pin, String accountNum, int balance) {

this.name = name;
this.userName = userName;
this.accountNum = accountNum;
this.pin = pin;
this.balance = balance;
}

public String toString() {

return "Name: " + this.name + "\n\nUsername: " + this.userName + " | " + "Pin: " + this.pin + "\n\n"
+ "Account Number: " + this.accountNum + "\n\nAccount Balance: $" + this.balance +
"\n\nNever share your login information with anyone!";
}

}

最佳答案

However each time I create a new user it overwrites the last one put into the file.

这是正确的。您不是在追加文件,而是在创建一个新文件。这与对象或序列化无关,这只是 FileOutputStream 的构造函数的问题。您正在使用。

但是,如果不使用我在这里不会引用的技巧,您就无法附加到对象流,因为有一个 header 会让后续读者感到困惑。您需要读入整个文件并再次将其写出。最简单的方法是序列化 ArrayList<User>而不是 User 对象本身。

关于java - 序列化对象被覆盖,而不是添加到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21127171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com