我想知道如何将抽象对象的ArrayList保存到文件中。 到目前为止,我只保存原始类型或基本类型的ArrayLists,方法是将它们转换为逗号分隔的字符串并将其与缓冲读取器一起存储。以有效的方式保存各种对象的ArrayList
但是现在我得到了一个游戏元素的ArrayList,它具有不同的属性和构造函数,所以我的常规方法将不起作用。必须有比将每个文件存储到文件或将每种类型的对象存储到文件更好的东西,或者添加大量的分隔符级别。
如何以一种很好的方式做到这一点?
我想知道如何将抽象对象的ArrayList保存到文件中。 到目前为止,我只保存原始类型或基本类型的ArrayLists,方法是将它们转换为逗号分隔的字符串并将其与缓冲读取器一起存储。以有效的方式保存各种对象的ArrayList
但是现在我得到了一个游戏元素的ArrayList,它具有不同的属性和构造函数,所以我的常规方法将不起作用。必须有比将每个文件存储到文件或将每种类型的对象存储到文件更好的东西,或者添加大量的分隔符级别。
如何以一种很好的方式做到这一点?
看一看序列化,也有很多教程在那里,所以我不打算发表任何代码:
无法实例抽象对象,所以你需要一个子类扩展它。此外,抽象类应执行Serialize
。然后使用ObjectOutputStream
您可以直接使用writeObject()
方法编写ArrayList
方法。
下面是示例应用程序
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,rose,dairy,sunflower,cauliflower .. 选项#2代替平面文件(txt),你可以使用apache poi框架以更有组织的方式编写 对象。
你能举一个你想要做什么的例子吗? –
“抽象对象”是什么意思?对象是具体的。 – Juvanis
我的意思是从抽象继承的不同类。 –