2012-06-18 47 views
0

我正在尋找一種方法來輸出一個實例化的類,一個對象到一個文件。我曾嘗試使用FileStream,它似乎沒有工作。經過研究,似乎我需要使用一種稱爲「序列化」的技術。我完全失去了這個話題。有人請爲我調試此代碼嗎?我有一個預感到問題正在發生,因爲我試圖在正常類中序列化一個抽象類。抽象類是java.util.Calendar。輸出對象到文件

class CalendarL implements java.io.Serializable{ 
    private static final long serialVersionUID = 1L; 

    java.util.Calendar calendar; 

    CalendarL (int date, int month, int year){ 
     calendar.set (Calendar.DATE, date); 
calendar.set (Calendar.MONTH, month); 
calendar.set (Calendar.YEAR, year); 
    } 
} 

class IO { 
    protected CalendarL reader() throws IOException, ClassNotFoundException{ 
     FileInputStream data = new FileInputStream("data.dat"); 
     ObjectInputStream dataObject = new ObjectInputStream(data); 

     CalendarL calendar = (CalendarL)dataObject.readObject(); 

     dataObject.close(); 
     data.close(); 

     return calendar; 
    } 


    protected void output(CalendarL calendar) throws IOException, WriteAbortedException, NotSerializableException { 
     new FileOutputStream("data.dat").close(); 

     FileOutputStream data = new FileOutputStream("data.dat"); 
     ObjectOutputStream dataObject = new ObjectOutputStream(data); 

     dataObject.writeObject(calendar); 
     dataObject.close(); 
     data.close(); 
    } 

}

這是錯誤我得到:

Exception in thread "main" java.io.NotSerializableException: hotelres.ClientL 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) 
at java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.writeObject(Unknown Source) 
+0

對不起,我忘了包括錯誤。 – Nyx

+0

你確定關於構造函數嗎? –

+0

IMO,您應該將timestamp值存儲爲'long'或'java.util.Date'而不是'Calendar'。 – Genzer

回答

2

我有一種預感,這個問題是存在的,因爲我想一個普通的類中序列化一個抽象類。抽象類是java.util.Calendar。

該預感不正確。你序列化實例(不是類),而實例的類不能是抽象類。此外,Calendar確實實施Serializable ...... javadoc這樣說。

+0

+1這可以幫助很多。 – Nyx

+0

感謝提示斯蒂芬。原來,我在日曆中有一個對象。我也必須在該類中實現Serializable。 – Nyx