我想知道如何將抽象對象的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
我的意思是從抽象繼承的不同類。 –