每次程序运行时创建一个新的但不同的对象
Posted
技术标签:
【中文标题】每次程序运行时创建一个新的但不同的对象【英文标题】:Creating a new, but different object, each time a program runs 【发布时间】:2014-02-04 16:24:20 【问题描述】:所以我试图将用户列表存储到外部文本文件中,如果他们还没有帐户,那么他们需要注册,他们的帐户会被添加到文本文件中。
但是每次我创建一个新用户时,它都会覆盖文本文件中的最后一个用户。
任何人都可以看到我创建新用户的代码有什么问题吗?如果有明显的东西可以解决它?
编辑:
我相信每次运行程序时都会重新创建文本文件,我怎样才能添加到它,而不是每次都创建一个新文件?
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: ");
double 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();
User user = new User(name, userName, pin, accountNum, balance);
// new user gets added to the array list
Bank.users.add(user);
System.out.println(user);
try
File file = new File("users.text");
if (!file.exists())
file.createNewFile();
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.append(String.valueOf(Bank.users));
bw.close();
System.out.print("DONE");
catch (IOException e)
e.printStackTrace();
【问题讨论】:
【参考方案1】:您的问题是,当您创建 FileWriter 实例时,您并没有要求它追加。默认为覆盖。
试试这个(上下文的额外行):
if (!file.exists())
file.createNewFile();
// Line being changed
FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
BufferedWriter bw = new BufferedWriter(fw);
bw.append(String.valueOf(Bank.users));
bw.close();
【讨论】:
谢谢!你对我帮助很大!【参考方案2】:这样的事情应该可以工作:
String filename= "users.test";
FileWriter fw = new FileWriter(filename,true); //the true will append the new data
fw.write(String.valueOf(Bank.users));//appends the string to the file
fw.close();
试试这个。一定要添加例外和其他东西。
【讨论】:
【参考方案3】:这是因为文件在打开时会截断。您必须以 append 模式打开它,使用:
FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
第二个参数将告诉FileWriter
这样做。参考here。
【讨论】:
【参考方案4】:替换这个:
FileWriter fw = new FileWriter(file.getAbsoluteFile()); //overwrite
通过这个:
FileWriter fw = new FileWriter(file.getAbsoluteFile(), true); //append
【讨论】:
以上是关于每次程序运行时创建一个新的但不同的对象的主要内容,如果未能解决你的问题,请参考以下文章