2016-12-05 2 views
-2

Я пару кода до методов, с которыми я столкнулся, с. Кажется, он работает, пока я не попытаюсь загрузить файл снова, и в нем ничего не получается. (Я не совсем понял, как очистить ArrayList перед выполнением второго загружаемого файла, но это будет позже).java howto загрузить и сохранить объект 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; 
    } 

} 
+0

I только se начальная загрузка. Где вы перезагружаетесь из основного? – MordechayS

+0

Что вы пытаетесь сделать в 'initialLoadATMAccounts (ArrayList loadAccounts)' и почему вы не используете параметр loadAccounts' в своем методе где-нибудь? Если вы не используете его, то почему ваш метод имеет этот параметр? Что-то подсказывает мне, что вам, возможно, понадобится прочитать [Является ли Java «передачей по ссылке» или «передачей по значению»?] (Http://stackoverflow.com/questions/40480/is-java-pass-by- ссылки или миновать по значению). – Pshemo

+0

Вы должны использовать [try-with-resources] (https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html). Кроме того, вы, вероятно, хотите, чтобы ваши методы загрузки возвращали 'ArrayList'. – 4castle

ответ

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

КСТАТИ: A IDE, как затмение было бы выдано предупреждение, когда вы перезаписать Парам loadAccounts ,

Смежные вопросы