0

以下の私のコードに欠けているものを教えてください。私のコードは実行されていますが、ファイルに書き込まれませんでした。テキストフィールド経由で場所を入力します。以下は私が持っているものです。

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

于 2013-05-29T07:26:51.443 に答える