【问题标题】:How to Serialize an ArrayLIst in java without getting errors?java - 如何在java中序列化ArrayLIst而不会出错?
【发布时间】:2011-12-18 02:18:33
【问题描述】:

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

但是当我尝试这样做时,我得到了运行时错误“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();
    }

}

【问题讨论】:

  • Department 需要实现Serializable 接口。
  • 这是否意味着,其代码中的对象部门需要声明为公共类部门实现可序列化??
  • 是的,谢谢它现在似乎可以正常工作了

标签: java serialization arraylist


【解决方案1】:

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

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

【讨论】:

  • 是的,谢谢它现在一切都好,我还在学习这个可序列化的东西
  • 为了反序列化数组列表,我会写这样的 ArrayList theDeps = new ArrayList(); theDeps = (ArrayList) in.readObject();
猜你喜欢
  • 2012-02-05
  • 2015-04-14
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 2015-09-07
  • 1970-01-01
相关资源
最近更新 更多