我想知道如何将抽象对象的 ArrayList 保存到文件中。到目前为止,我只保存原始类型或原始类型的 ArrayList,方法是将它们转换为逗号分隔的字符串并将其存储在缓冲读取器中。
但是现在我有一个游戏元素的 ArrayList,它具有非常不同的属性和构造函数,所以我的正常方法行不通。必须有比将每个对象存储到文件或将每种类型的对象存储到文件或添加大量分隔符级别更好的东西。
我该如何以一种好的方式做到这一点?
我想知道如何将抽象对象的 ArrayList 保存到文件中。到目前为止,我只保存原始类型或原始类型的 ArrayList,方法是将它们转换为逗号分隔的字符串并将其存储在缓冲读取器中。
但是现在我有一个游戏元素的 ArrayList,它具有非常不同的属性和构造函数,所以我的正常方法行不通。必须有比将每个对象存储到文件或将每种类型的对象存储到文件或添加大量分隔符级别更好的东西。
我该如何以一种好的方式做到这一点?
看看序列化,那里有很多教程,所以我不打算发布任何代码:
您不能实例化抽象对象,因此您需要一个扩展它的子类。抽象类也应该实现Serialize
。然后使用ObjectOutputStream
可以直接写ArrayList
usingwriteObject()
方法。
下面是示例应用程序
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());
}
答案可能是两个。
以后看文件的用途是什么。
ANS 1:如果您希望将对象值临时保存在文件中并从文件中重新加载,那么序列化是最好的选择。
ANS 2:如果文件是程序的输出,然后您尝试以下选项#1:文件中的每一行以唯一的对象名称 OBJECT1、蓝色、粉红色、黄色.... OBJECT2、玫瑰、乳制品、向日葵开始, cauliflower.. option#2 而不是平面文件(txt),您可以使用 apache poi 框架以更有条理的方式编写对象。