-1

私は大きな問題を抱えています.txtファイルに同じオブジェクトを書き込みます.txtに書いたすべてのオブジェクトをクリックして表示すると、最後の1つだけが表示され、JOptionPaneでアカウントを表示する方法が表示されます。 1、2、3 の数字を取るアカウントを作成してください。私は明白に説明すると信じています

 if( str.equals("Receipt") )
 {
      ObjectInputStream in = null;
      Account acc = null;
      try
      {
           in = new ObjectInputStream(new FileInputStream("Accounts.txt"));
           while( (acc = (Account) in.readObject()) !=null)
           {
                if (acc instanceof Account)
                     ((Account)acc).print();
                //acc.print();
           }
      }
      catch(EOFException ex)
      {
           System.out.println("End of file reached.");
      }
      catch(ClassNotFoundException ex)
      {
           System.out.println("Error casting");
           ex.printStackTrace();
      }
      catch(FileNotFoundException ex)
      {
           System.out.println("Error specified file does not exist");
           ex.printStackTrace();
      }
      catch(IOException ex)
      {
           System.out.println("Error with I/O processes");
           ex.printStackTrace();
      }
      finally
      {
           try
           {
                in.close();
           }
           catch(IOException ex)
           {
                System.out.println("Another IOException during the closing");
                ex.printStackTrace();
           }
      }
 }

オブジェクトをファイルに書き込むコード

Account ac=new Account(posoOfil,poso,ariLoga,aitiol,diafor); 
      ac.print();

      try{

      OutputStream file = new FileOutputStream("Accounts.txt");
      OutputStream buffer = new BufferedOutputStream( file );
      ObjectOutput output = new ObjectOutputStream( buffer );
      try{
        output.writeObject(ac);
        output.flush();

System.out.println("Object written to file");
      }
      finally{
        output.close();
      }
    }
      catch
(FileNotFoundException ex) {System.out.println("Error with specified file") ;
ex.printStackTrace();}

    catch(IOException ex){
      System.out.println("Cannot perform output.");
    }

      }

そして、クラス アカウント

public class Account implements Serializable {

    private int arithmKat;
 // private Date date ;
    private int posoOfil;
    private int posoKat;
    private String ariLoga ;
    private String aitiol;
    private boolean diafor=false;

    public Account(int posoOfil, int posoKat,String ariLoga,String aitiol,boolean diafor){
    arithmKat++;
    this.posoOfil=posoOfil;
    this.posoKat=posoKat;
    this.ariLoga=ariLoga;
    this.aitiol=aitiol;
    this.diafor=diafor;

    }
    void print(){
    System.out.println(arithmKat+"  "+posoOfil+"  "+posoKat+"  "+diafor);}

}
4

1 に答える 1

0

ファイルに書き込むアカウントは1 つだけです。アカウントを記述するコードにループはまったくありません。複数のアカウントを書き込むコードは次のようになります。

private void writeAccounts(List<Account> accounts) throws IOException {
    OutputStream file = new FileOutputStream("Accounts.txt");
    OutputStream buffer = new BufferedOutputStream(file);
    ObjectOutput output = new ObjectOutputStream(buffer);

    try {
        for (Account account : accounts) {        
            output.writeObject(account);
        }
        output.close();
    }
    finally {
        output.close();
    }
}
于 2013-02-23T10:13:21.097 に答える