2012-09-25 29 views
1

我想知道如何將抽象對象的ArrayList保存到文件中。 到目前爲止,我只保存原始類型或基本類型的ArrayLists,方法是將它們轉換爲逗號分隔的字符串並將其與緩衝讀取器一起存儲。以有效的方式保存各種對象的ArrayList

但是現在我得到了一個遊戲元素的ArrayList,它具有不同的屬性和構造函數,所以我的常規方法將不起作用。必須有比將每個文件存儲到文件或將每種類型的對象存儲到文件更好的東西,或者添加大量的分隔符級別。

如何以一種很好的方式做到這一點?

+0

你能舉一個你想要做什麼的例子嗎? –

+3

「抽象對象」是什麼意思?對象是具體的。 – Juvanis

+0

我的意思是從抽象繼承的不同類。 –

回答

1

無法實例抽象對象,所以你需要一個子類擴展它。此外,抽象類應執行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()); 
} 
0

答案可能是兩個。

取決於稍後文件的用法。

ANS 1:它希望將對象值臨時保存在文件中,並重新從文件重新加載,然後序列化是最佳選擇。

ANS 2:如果文件是程序的輸出,然後您嘗試以下 選項#1:啓動文件中的每一行與唯一對象名稱 OBJECT1,藍色,粉紅色,黃色.... OBJECT2,rose,dairy,sunflower,cauliflower .. 選項#2代替平面文件(txt),你可以使用apache poi框架以更有組織的方式編寫 對象。

相關問題