2011-10-30 22 views
1

我只是試圖輸出一個先前創建的ArrayList來將其串行化以備將來存儲。如何在java中序列化ArrayLIst而不會出錯?

但是當我attmept這樣做,我得到的運行時錯誤「notSerialisableException:系

是他們的序列化的ArrayList?

會有人能告訴我爲什麼我可以的speicial方式。收到此錯誤

這是代碼:

import java.awt.*; 
    import java.util.*; 
    import java.io.*; 
    import java.io.Serializable; 

    public class tester1ArrayListObjectSave 
    { 

    private ArrayList <Department> allDeps = new ArrayList<Department>(); 
    private int choice = 0; 
    private String name; 
    private String loc; 


    Department theDepartment; 
    Scanner scan; 

    public static void main(String[] args) 
    { 

    new tester1ArrayListObjectSave();  

    } 

    public tester1ArrayListObjectSave() 
    { 
      scan = new Scanner(System.in); 
      options(); 
    } 

    public void options() 
    { 
     System.out.println("wadya wanna do"); 



     System.out.println("1. create a new department"); 
     System.out.println("2. read from text file"); 
     System.out.println("4. save it to system as a serializable file"); 
     System.out.println(". read from text file"); 
     System.out.println("3. to exit"); 

     choice = scan.nextInt(); 
     workOutOptions(); 

    } 

    public void workOutOptions() 
    { 
     if (choice ==1) 
     { 
      createNewEmp(); 
     } 
     else if (choice ==2) 
     { 
      try 
      { 
      readTextToSystem(); 
      } 
      catch (IOException exc) 
      { 
       System.out.println("uh oh their was an error: "+exc); 
      } 
     } 
     else if (choice == 3) 
     { 
      System.exit(0); 
     } 
     else if (choice ==4) 
     { 
      try 
      { 
      createSerialisable(); 
      } 
      catch (IOException exc) 
      { 
       System.out.println("sorry could not serialise data cause of this:"+exc); 
      } 
     } 
     else 
     { 
      System.out.println("do nothing"); 
     } 
    } 


    public void createNewEmp() 
    { 


      System.out.println("What is the name"); 
      name = scan.next(); 
      System.out.println("what is the chaps loc"); 
      loc = scan.next(); 
      try 
      { 
       saveToSystem(); 
      } 
       catch (IOException exc) 
      { 
      // do something here to deal with problems 
      } 
      theDepartment = new Department(name,loc); 

      allDeps.add(theDepartment); 

      options(); 
    } 

    public void saveToSystem() throws IOException 
    { 
     FileOutputStream fos = new FileOutputStream("backUp.txt", true); 
     PrintStream outFile = new PrintStream(fos); 
     System.out.println("added to system succesfully"); 
     outFile.println(name); 
     outFile.println(loc); 
     outFile.close(); 
     options();  
    } 

    public void readTextToSystem() throws IOException 
    { 
     Scanner inFile = new Scanner (new File ("backUp.txt")); 
     while (inFile.hasNextLine()) 
     { 
     name=inFile.nextLine(); 
     System.out.println("this is the name: "+name); 
     loc = inFile.nextLine(); 
     System.out.println("this is the location: "+loc); 
     Department dDepartment = new Department(name,loc); 
     allDeps.add(dDepartment); 
     options(); 

     } 
     System.out.println(allDeps); 
    } 

    public void createSerialisable() throws IOException 
    { 
     FileOutputStream fileOut = new FileOutputStream("theBkup.ser"); 
     ObjectOutputStream out = new ObjectOutputStream(fileOut); 
     out.writeObject(allDeps); 
     options(); 
    } 

} 
+4

'Department'需要實現'Serializable'接口。 – blackcompe

+0

那麼這意味着,其代碼中的對象部門需要聲明爲 public class deparment implements serializable? – Binyomin

+0

是的感謝它似乎好工作現在 – Binyomin

回答

7

ArrayList不是問題;你的Department對象是。

您需要在該對象中實現Serializable接口。

+0

是的感謝所有現在好了,我還在學習這個東西序列中 – Binyomin

+0

爲了我會寫這樣的事情 的ArrayList到deserialise數組列表 theDeps =新的ArrayList (); \t \t \t \t theDeps =(ArrayList)in.readObject(); – Binyomin