次回は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 に決定させるのが最善です。それを行う方法の 1 つは を使用することですが、プラットフォームに依存しない改行文字について尋ねるこのすばらしいスタック オーバーフローの投稿にSystem.getProperty("line.separator")
リストされている他の方法があります。