0

您能否告知我下面的代码缺少什么?我的代码正在运行,但它没有写入文件。通过文本字段输入 where。下面是我所拥有的。

public class JFrameNewAccount extends javax.swing.JFrame {

 ArrayList<BankAccount> list = new ArrayList<BankAccount>();
 BankAccount account = new BankAccount();


public JFrameNewAccount() {
    initComponents();



 }
private void btnSaveAActionPerformed(java.awt.event.ActionEvent evt) {
account.setAccountName(txt_accountname.getText());
account.setAccountNo(txt_accountnumber.getText()); 

String fileName = "bank.txt";
    FileWriter file = null;

    try {
        file = new FileWriter(fileName,true);
        PrintWriter pw = new PrintWriter(file);
        for(BankAccount str: list) {
            pw.println(str);
        }

       pw.flush();
       pw.println("\n");


    } catch(FileNotFoundException ex) {
       JOptionPane.showMessageDialog(this, "Can't create your account!");

    } 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);
       }
    }

请指教。

4

1 回答 1

1

下次您应该尝试发布SSCCE 。

您的问题是您已经创建了一个 ArrayList(即“列表”),为 ArrayList 创建了一个对象(即“帐户”),向该对象添加了数据(通过调用 setAccountName 和 setAccountNo)并尝试将所有内容写入ArrayList 到文件中。

在任何时候,您都没有将对象设置到 ArrayList 中。

我假设您正在尝试创建一个框架,将屏幕中的数据设置到文件中。如果是这样,这就是我要做的。(更改在 ActionPerformed 的第 1 行和第 4 行)

注意:我不会清理你的代码(如果我能挑剔的话,我会写得有点不同)。响应的重点是向您展示为什么您的代码不起作用,这就是问题所在。

public class JFrameNewAccount extends javax.swing.JFrame {

    private List<BankAccount> list = new ArrayList<>();

    public JFrameNewAccount() {
        initComponents();
    }

    private void btnSaveAActionPerformed(java.awt.event.ActionEvent evt) {
        BankAccount account = new BankAccount();
        account.setAccountName(txt_accountname.getText());
        account.setAccountNo(txt_accountnumber.getText()); 
        list.add(account);

        String fileName = "bank.txt";
        FileWriter file = null;

        try {
            file = new FileWriter(fileName,true);
            PrintWriter pw = new PrintWriter(file);
            for(BankAccount str: list) {
                pw.println(str);
            }

           pw.flush();
           pw.println("\n");
        } catch(FileNotFoundException ex) {
           JOptionPane.showMessageDialog(this, "Can't create your account!");
        } 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);
        }
    }

更新:刚看到你的评论。您的解决方案不会为您提供所需的输出,因为您正在尝试编写一个对象。您需要覆盖它的 toString。下面的示例

public class BankAccount {
    private String accountName;
    private String accountNumber;

    @Override
    public String toString() {
        return "Account Name: \"" + accountName + "\"" + System.getProperty("line.separator") + "Account Number: \"" + accountNumber + "\"";
    }

    // Setters and getters here
    public String getAccountName() {
        return accountName;
    }

    public String getAccountNumber() {
        return accountNumber;
    }

    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }

    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }
}

解释流只向它们写入字符串。如果您尝试将对象放入 System.out.println() 中,您将获得类似的奇怪输出。您看到的输出是 java 中 Object 类中实现的默认 toString() ,它显示了类名和对象的哈希码。您可以自定义 toString 或更改将对象写入文件的方式(通过内部调用 getter)或输出流(即 System.out.println())

更新 2:如果您想在每个字段之间使用新行格式化它,您可以根据操作系统使用“\n”或“\r\n”。最好让 Java 决定哪一个可以工作。其中一种方法是使用System.getProperty("line.separator"),但在这篇精彩的 Stack Overflow 帖子中列出了其他方法,询问与平台无关的换行符

于 2013-05-29T07:26:51.443 回答