0

我想创建一个“添加帐户”应用程序。我创建了一个 ArrayList 并将其存储到一个文本文件中,但是,它只将一组数据写入文本文件。

例如:帐户名称:Joe 帐号:10 当我按下“保存”按钮时,它现在保存在文本文件中,但是当我创建新帐户时,例如:帐户名称: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();
        }
    }
}            
4

3 回答 3

2

似乎您的 FileWriter 每次都会覆盖输出文件。Try file = new FileWriter(fileName, true),它将其置于附加模式,并将数据添加到输出文件中。

于 2013-05-26T03:43:53.270 回答
2

要追加到现有文件,您需要使用FileWriter的重载构造函数,它接受两个参数。签名是:

public FileWriter(String fileName,
      boolean append)
       throws IOException

在给定 File 对象的情况下构造一个 FileWriter 对象。如果第二个参数为真,那么字节将被写入文件的末尾而不是开头。

您可以将其用作:

file = new FileWriter(fileName,true);
于 2013-05-26T03:44:12.477 回答
0

有两种方法可以做到这一点。覆盖 FileWriter 似乎是一个不错的选择,但您仍需要执行以下操作:

  1. 加载保存在文本文件中的 ArrayList。
  2. 将新数据添加到 ArrayList(使用 .add())
  3. 将 ArrayList 保存到文件中(覆盖之前的任何内容)。

如果您附加到文本文件,您会将两个 ArrayLists 保存到文本文件中(我相信)这不是预期的结果。

于 2013-05-26T03:49:45.950 回答