如何在java中序列化ArrayLIst而不会出错?

时间:2011-10-30 03:47:29

标签: java serialization arraylist

我只是想输出一个先前创建的ArrayList来序列化它以供将来存储。

但是当我接受这样做时,我得到了runTime错误“notSerialisableException:Department。

他们是一种序列化arrayList的特殊方式吗?

有人能告诉我为什么我会收到此错误。

这是代码:

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

}

1 个答案:

答案 0 :(得分:7)

ArrayList不是问题;你的Department对象是。

您需要在该对象中实现Serializable接口。