使用Java将多个ArrayLists保存/加载到一个文件中

时间:2016-04-13 03:20:29

标签: java serialization arraylist

目前我有一个程序可以保存和加载类型为"变量"的数组列表。从文件。但是,我希望能够从一个文件中保存和加载不同的对象(不同类的实例,例如"变量","函数"等等)。这是我现在的代码:

 public SaveState(){
    ObjectOutputStream out = null;
    try {
        out = new ObjectOutputStream(new FileOutputStream("vars.stt"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    ArrayList<Variables> vars = new ArrayList<>();
    vars.add(new Variables("g", 5));
    vars.add(new Variables("f", -3.12));
    try {
        out.writeObject(vars);
        out.flush();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

public LoadState(){
    ObjectInputStream in = null;
    try {
        in = new ObjectInputStream(new FileInputStream("vars.stt"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        //final Object o = in.readObject();
        final ArrayList<Variables> vars = (ArrayList<Variables>) in.readObject();
        System.out.println(vars.toString());
    } catch (IOException | ClassNotFoundException e) {
        e.printStackTrace();
    }
}

此代码仅允许我从文件加载一个对象类型。有没有办法以这种方式保存/加载多个对象类型?

2 个答案:

答案 0 :(得分:2)

创建一个类层次结构:

//base class. No need to write any content
class ProgramElement {

}

//your variables class
class Variables extends ProgramElement {
    //your code
}

//your functions class
class Functions extends ProgramElement {
    //your code
}

//your lists class
class Lists extends ProgramElement {
    //your code
}

然后使用ProgramElement类型的ArrayList。请记住列表,这不是您的列表类。它是java的List接口。

List<ProgramElement> elements = new ArrayList<>();
elements.add(aFunction); //add function object
elements.add(aList);  //lists object
elements.add(aVariable); //variables object

注意:您可以使用Object类型的List实现相同的功能。但不建议这样做,因为这不是一个好习惯。

答案 1 :(得分:2)

您可以简单地使用包含变量或函数的arraylists的地图。地图在性能方面也很出色。

    Map<String, List> map = new HashMap<String, List>();
    map.put("variable", arralist1);
    map.put("functions", arralist2);
    map.put("list", arralist3);