【问题标题】:Saving an ArrayList of various objects in an efficient way以有效的方式保存各种对象的 ArrayList
【发布时间】:2012-09-25 10:46:18
【问题描述】:
我想知道如何将抽象对象的 ArrayList 保存到文件中。
到目前为止,我只保存原始类型或原始类型的 ArrayList,方法是将它们转换为逗号分隔的字符串并将其存储在缓冲读取器中。
但是现在我有一个游戏元素的 ArrayList,它具有非常不同的属性和构造函数,所以我的常规方法不起作用。必须有比将每个对象存储到文件或将每种类型的对象存储到文件或添加大量分隔符级别更好的东西。
我该如何以一种好的方式做到这一点?
【问题讨论】:
标签:
java
arraylist
abstract-class
abstract
【解决方案2】:
你不能实例化抽象对象,所以你需要一个扩展它的子类。抽象类也应该实现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());
}
【解决方案3】:
答案可能是两个。
以后要看文件的用途。
ANS 1:如果您希望将对象值临时保存在文件中并从文件中重新加载,那么序列化是最好的选择。
ANS 2:如果文件是程序的输出,然后您尝试以下操作
选项#1:以唯一的对象名称开始文件中的每一行
OBJECT1,蓝色,粉色,黄色......
OBJECT2,玫瑰,乳制品,向日葵,花椰菜..
选项#2 而不是平面文件(txt),您可以使用 apache poi 框架来编写
以更有条理的方式呈现对象。