我想创建一个“添加帐户”应用程序。我创建了一个ArrayList并将其存储到文本文件中,但是,它只将一组数据写入文本文件。
Ex:帐户名称:Joe 帐号:10 当我按下“保存”按钮时,它现在保存在文本文件中,但是当我创建新的accont时,例如:帐户名称:Ryan,帐号:20,我创建的第一个帐户已被覆盖。你能告诉我代码有什么问题吗?
public class JFrameNewAccount extends javax.swing.JFrame {
ArrayList<String> al = new ArrayList<String>();
private void btnSaveAActionPerformed(java.awt.event.ActionEvent evt) {
ButtonGroup bg = new ButtonGroup();
bg.add(rad_savings);
bg.add(rad_checking);
al.add(txt_accountnumber.getText());
al.add((txt_accountname.getText()));
if (rad_savings.isSelected()) {
al.add(rad_savings.getText());
} else {
al.add(rad_checking.getText());
al.add(txt_initialbalance.getText());
if (rad_savings.isSelected()) {
al.add(txt_interestrate.getText());
} else {
al.add(txt_overdraft.getText());
}
String fileName = "bank.txt";
FileWriter file = null;
try {
file = new FileWriter(fileName);
PrintWriter pw = new PrintWriter(file);
for (String str : al) {
pw.println(str);
}
pw.flush();
System.out.println("Write successful...");
} catch (FileNotFoundException ex) {
System.out.println("File not found....");
} catch (IOException ex) {
Logger.getLogger(JFrameNewAccount.class.getName()).log(
Level.SEVERE, null, ex);
} finally {
try {
file.close();
} catch (IOException ex) {
Logger.getLogger(JFrameNewAccount.class.getName()).log(
Level.SEVERE, null, ex);
}
}
JOptionPane
.showMessageDialog(this, "Your accont has been created!");
txt_accountname.setText("");
txt_accountnumber.setText("");
txt_initialbalance.setText("");
txt_overdraft.setText("");
txt_interestrate.setText("");
bg.clearSelection();
txt_accountnumber.requestFocus();
}
}
}
答案 0 :(得分:2)
看起来你的FileWriter每次都会覆盖输出文件。尝试file = new FileWriter(fileName, true)
,将其置于追加模式,然后将数据添加到输出文件中。
答案 1 :(得分:2)
要附加到现有文件,您需要使用FileWriter的重载构造函数,它带有两个参数。签名是:
public FileWriter(String fileName,
boolean append)
throws IOException
在给定File对象的情况下构造FileWriter对象。如果第二个参数为true,则字节将写入文件的末尾而不是开头。
您可以将其用作:
file = new FileWriter(fileName,true);
答案 2 :(得分:0)
有两种方法可以做到这一点。覆盖FileWriter似乎是一个不错的选择,但您仍然需要执行以下操作:
如果你附加到文本文件,你会将两个ArrayLists保存到文本文件中(我相信)不是预期的结果。