java howto加载并保存一个ArrayList对象

时间:2016-12-05 16:44:44

标签: java arraylist java-io

我已经将代码与我遇到问题的方法配对了。它似乎'工作,直到我再次尝试加载文件,它没有任何内容。 (我还没有完全理解在执行第二次加载之前如何清除ArrayList,但这是为了以后)。

我很抱歉,如果隐藏在其他某些命名之下的某个地方,我还没有学到,但这是一个明天到期的项目,我在我的智慧结束。

import java.util.*;
import java.io.*;

public class MainATM3 {

  public static ArrayList<ClientAccount> accounts = new ArrayList<ClientAccount>();
  public static ClientAccount editBankAccount = new ClientAccount("placeholder",1234,1);;

  public static void main(String[] args) {

// Create ATM account ArrayList
    ArrayList<ClientAccount> accounts = new ArrayList<ClientAccount>();
// Get Account data from files
initialLoadATMAccounts(accounts);
System.out.println("Loaded "+accounts.size());

System.out.println("before Array "+(accounts.size()));
    accounts.add(0,new ClientAccount("Jess",500,1830));
    accounts.add(1,new ClientAccount("Mary",1111.11,7890));
System.out.println("after Array "+(accounts.size()));

saveATMAccounts(accounts);  
System.out.println("saved "+(accounts.size()));

initialLoadATMAccounts(accounts);
System.out.println("Loaded "+accounts.size());

  System.out.println("Logged Out");

  }       

// Save ArrayList of ATM Objects //call by: saveATMAccounts(accounts); 
  public static void saveATMAccounts(ArrayList<ClientAccount> saveAccounts) {
    FileOutputStream fout = null;
    ObjectOutputStream oos = null;
    try{  
      fout=new FileOutputStream("ATMAccounts.sav");
      oos = new ObjectOutputStream(fout);
      oos.writeObject(accounts);
      System.out.println("objects written "+(accounts.size()));
      } catch (Exception ex) {
      ex.printStackTrace();
      } finally {
        if (fout != null) {
          try {
            fout.close();
          } catch (IOException e) {
            e.printStackTrace();
            }
          }
        if (oos != null) {
          try {
            oos.close();
          } catch (IOException e) {
          e.printStackTrace();
            }
        }
     }
  }


  // INITIAL Load ArrayList of ATM Objects //call by: initialLoadATMAccounts(accounts); 
  public static void initialLoadATMAccounts(ArrayList<ClientAccount> loadAccounts){
    FileInputStream fIS = null;
    ObjectInputStream oIS = null;
    try{  
      fIS=new FileInputStream("ATMAccounts.sav");
      oIS = new ObjectInputStream(fIS);
      ArrayList<ClientAccount> loadAccounts = (ArrayList<ClientAccount>) oIS.readObject();
      oIS.close();
      fIS.close(); 
    }
    catch(Exception exc){
      exc.printStackTrace(); 
    }
  }
}


import java.io.Serializable;
public class ClientAccount implements Serializable {

    public String accountName;
    public double accountBalance;
    public int accountPIN;

    public ClientAccount(String accountName, double accountBalance, int accountPIN){
      this.accountName=accountName;
      this.accountBalance=accountBalance;
      this.accountPIN=accountPIN;
    }

// Account Name Methods    
    public String getAccountName() {
      return accountName;
    }
    public void setAccountName(String name) {
      accountName = name;
    }

// Account Balance Methods
    public double getAccountBalance() {
      return accountBalance;
    }
    public void setAccountBalance(double balance) {
      accountBalance = balance;
    }

// PIN Methods
    public int getAccountPIN() {
      return accountPIN;
    }
    public void setAccountPIN(int newPIN) {
      accountPIN = newPIN;
    }

}

1 个答案:

答案 0 :(得分:0)

您应该返回新加载的数组,而不是将所需的数组作为参数传递给initialLoadATMAccounts:

public static List<ClientAccount> initialLoadATMAccounts(){
    FileInputStream fIS = null;
    ObjectInputStream oIS = null;
    try{  
      fIS=new FileInputStream("ATMAccounts.sav");
      oIS = new ObjectInputStream(fIS);
      ArrayList<ClientAccount> loadAccounts = (ArrayList<ClientAccount>)     oIS.readObject();
      oIS.close();
      fIS.close(); 
      return loadAccounts;
    }
    catch(Exception exc){
      exc.printStackTrace(); 
    }
}

顺便说一句:像eclipse这样的IDE会在你覆盖param loadAccounts时发出警告。