以有效的方式保存各种对象的ArrayList

时间:2012-09-25 10:46:18

标签: java arraylist abstract-class abstract

我想知道如何将抽象对象的ArrayList保存到文件中。 到目前为止,我只保存原始类型的原始类型或ArrayLists,方法是将它们转换为逗号分隔的String并将其与缓冲读取器一起存储。

但是现在我有一个游戏元素的ArrayList,它具有非常不同的属性和构造函数,所以我的常规方法不起作用。必须有比将每个文件或每种类型的对象存储到文件或添加大量分隔符级别更好的东西。

我如何以一种很好的方式做到这一点?

3 个答案:

答案 0 :(得分:3)

看看序列化,有很多教程,所以我不会发布任何代码:

http://www.tutorialspoint.com/java/java_serialization.htm

答案 1 :(得分:1)

您无法实例化抽象对象,因此您需要一个扩展它的子类。抽象类也应该实现Serialize。然后使用ObjectOutputStream,您可以使用ArrayList方法直接撰写writeObject()

以下是示例应用程序

public abstract class Parent implements Serializable {
    public abstract String getValue(); //Just to show value persist
}

public class Child extends Parent {
    String value = null;
    Child(String value) {
        this.value = value;
    }
    public String getValue() {
        return value;
    }
}
// No throws clause here
public static void main(String[] args) throws FileNotFoundException,
        IOException, ClassNotFoundException {
    //create Arraylist
    ArrayList<Parent> parents = new ArrayList<Parent>();
    parents.add(new Child("test"));
    //store
    ObjectOutputStream objectOutputStream = new ObjectOutputStream(
            new FileOutputStream("test.txt"));
    objectOutputStream.writeObject(parents);
    objectOutputStream.close();
    //Read back     
    ObjectInputStream objectInputStream = new ObjectInputStream(
            new FileInputStream("test.txt"));
    ArrayList<Parent> readObjects = (ArrayList<Parent>)objectInputStream.readObject();
    System.out.println(readObjects.get(0).getValue());
}

答案 2 :(得分:0)

答案可能是两个。

取决于稍后文件的用途。

ANS 1:您希望将对象值临时保存在文件中并从文件中重新加载,然后序列化是最佳选择。

ANS 2:如果文件是程序的输出,那么你尝试以下      选项#1:使用唯一对象名称启动文件中的每一行                OBJECT1,蓝色,粉红色,黄色....                OBJECT2,玫瑰,乳制品,向日葵,花椰菜..      选项#2而不是平面文件(txt)你可以使用apache poi框架来编写               对象更有条理。