2013-05-29 6 views
0

Pourriez-vous s'il vous plaît aviser ce qui manque pour mon code ci-dessous? Mon code est en cours d'exécution mais il n'a pas écrit dans un fichier. Entrées où via les champs de texte. Voici ce que j'ai.Enregistré dans ArrayLists mais mauvaise sortie écrire dans un fichier

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

Veuillez nous aviser.

+1

Je ne vois pas de code qui ajoute l'objet 'BankAccount' à' list'. – sanbhat

+0

Pourriez-vous s'il vous plaît m'en donner un exemple? – dyonas

+0

ressemble à votre «liste» est vide. ajouter backAccount à la liste .. 'list.add (backAccount);' – sanbhat

Répondre

1

Vous devriez essayer de poster un SSCCE la prochaine fois. Votre problème est que vous avez créé un ArrayList (à savoir "list"), créé un objet pour ArrayList (à savoir "compte"), ajouté des données à l'objet (en appelant setAccountName et setAccountNo) et essayé écrire tout dans ArrayList dans le fichier.

À aucun moment, vous n'avez défini l'objet dans ArrayList.

Je suppose que vous essayez de créer un cadre qui définit les données de l'écran dans le fichier. Si oui, c'est ce que je ferais. (les modifications sont dans les lignes 1 et 4 de votre ActionPerformed)

Remarque: Je ne nettoie pas votre code (si je pouvais choisir, je l'écrirais un peu différemment). Le but de la réponse est de vous montrer pourquoi votre code ne fonctionne pas, ce qui est la question.

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

Mise à jour: Je viens de voir votre commentaire. Votre solution ne vous donnera pas la sortie dont vous avez besoin parce que vous essayez d'écrire un objet. Vous devez remplacer OverString. Exemple ci-dessous

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

Explication: Streams écrire uniquement les chaînes pour eux. Si vous essayez de mettre un objet dans System.out.println(), vous obtiendrez une sortie similaire à bizarre. La sortie que vous voyez est la valeur par défaut toString() implémentée dans la classe Object de java qui vous montre le nom de la classe et le code de hachage de l'objet. Vous pouvez personnaliser votre toString ou changer la façon dont votre écriture l'objet à déposer (en appelant getters en interne) ou le flux de sortie (c.-à-System.out.println())

Mise à jour 2: Si vous voulez formater Avec de nouvelles lignes entre chaque champ, vous pouvez utiliser un "\ n" ou "\ r \ n" basé sur le système d'exploitation. Il est préférable de laisser Java décider lequel fonctionnera. L'une des façons de le faire est d'utiliser System.getProperty("line.separator") mais il existe d'autres façons comme indiqué dans this wonderful Stack Overflow post asking about platform independent new line characters.

+0

C'est génial! Merci beaucoup!!!!! Merci pour les conseils! Grandement apprécié!!!!.J'ai un problème pour obtenir le compteType; il était en radiobutton, je ne peux pas l'obtenir. – dyonas

+0

Quand je suis en train de créer une nouvelle ligne pour chaque donnée, il me donne une erreur. comment peut rendre la sortie comme ceci: N ° de compte: 101 // puis nouvelle ligne Accont Nom: John // puis nouvelle ligne Type de compte: // puis nouvelle ligne Solde initial: – dyonas

+0

Mise à jour la solution pour avoir de nouvelles lignes comme vous l'avez demandé. Si vous aimez une solution, vous devez l'accepter et jusqu'à voter (si vous pouvez). Il est un bon moyen de montrer son appréciation envers ceux qui prennent le temps de vous aider :) – javatarz

Questions connexes