2012-12-25 78 views
0

我試圖將對象保存到下面的類中的文件,但它給我java.io.NotSerializableException。Java按日期保存對象

import java.io.FileOutputStream; 
import java.io.ObjectOutputStream; 
import java.util.ArrayList; 
import java.util.Calendar; 

class Saver { 

    Calendar cal = Calendar.getInstance(); 

    public void save(ArrayList<Product> products) { 
    for (int i = 0; i < products.size(); i++) { 
     try { 
     FileOutputStream saveFile = new FileOutputStream(
     "/" + products.get(i) + ".product" 
     ); 

     ObjectOutputStream oos = new ObjectOutputStream(saveFile); 
     oos.writeObject(products.get(i)); 
     } catch(Exception ex) { 
     System.out.println(ex); 
     } 
    } 
    } 

} 

儘管類產品看起來是這樣的:

class Product { 

    private String title; 
    private int id; 
    private double price; 

    public Product(String title, int id, double price) { 
    this.title = title; 
    this.id = id; 
    this.price = price; 
    } 

    public String getTitle() { 
    return title; 
    } 

    public int getId() { 
    return id; 
    } 

    public double getPrice() { 
    return price; 
    } 

    public void setTitle(String title) { 
    this.title = title; 
    } 

    public void setId(int id) { 
    this.id = id; 
    } 

    public void setPrice(double price) { 
    this.price = price; 
    } 

} 

什麼我做錯了,我怎麼能在對象存儲在一個文件呢? 在此先感謝!

回答

3

由於異常說,(在這種情況下Product)類不序列化。您可以可能剛剛擺脫這種變化:

class Product implements Serializable { 
    // Code as before 
} 

但你也應該考慮宣佈一個serialVersionUID領域版本的目的。請閱讀Serializableserialization tutorial的文檔,以獲得lot的更多詳細信息。您不需要編寫任何新成員 - 它只是一個標記接口 - 但您還可以添加其他方法來更好地控制序列化和反序列化。

您還應該考慮替代序列化方法 - 我個人喜歡Google Protocol Buffers,但我有偏見:)請考慮您需要的版本,以及任何跨平臺支持。

此外:

  • 您使用Product.toString()隱含的文件名,但不會給你任何用處。你想要什麼這個文件名是基於什麼?
  • 你沒有做任何事情cal - 你想如何存儲當前日期/時間?
+0

代碼看起來不同(因此標題與日期),但我認爲這導致了問題,所以我把它留下。我正在用getTitle()方法保存文件,並希望使用日期作爲名稱的目錄中的文件。感謝您的快速回答,它的工作原理!我怎樣才能添加日期只爲一個目錄,如: \ 12252012 \ product1.product – Selim

+0

@Selim:這就是爲什麼重要的是要花時間寫一個問題...確保它是一致的,而且你只包括代碼和文本你需要。現在,聽起來你的第二個問題實際上是將日期格式化爲字符串......查看「SimpleDateFormat」。 –

+0

再次感謝!這是我的第一個問題,期待那些會變得更好:-) – Selim