2012-05-18 48 views
3

我已經看到了很多不同的文章,講述了你應該如何將一個對象序列化到一個文件中,並且所有這些文章在本質上如何做到以及如何做到最好做法是。因此,這裏是我想什麼要儲存:Java-將對象數據保存到一個文件

public class IHandler{ 
    public double currentLoad; 
    public String currentPrice; 
    public String configArgs[]; 
}; 

我們可以假設,configArgs的大小是已知的,我需要做一個文件,這裏是我到目前爲止所。

public static void serializeDataOut(IHandler ISH)throws IOException{ 
    String fileName= "Test.txt"; 
    FileOutputStream fos = new FileOutputStream(fileName); 
     //What do I do here? 
    } 

    public static IHandler serializeDataIn(){ 
     //What do I do here? 
    } 
+1

您必須先決定格式。二進制? XML? JSON?所有權? –

+1

*「,並且它們在性質上如何做以及最佳實踐是衝突的。」*最好的方法通常取決於確切的要求。對象序列化可以適用於特定情況,但未來JRE缺乏可讀性保證會限制其實用性。要獲得最佳答案,請提供更多上下文。你節省1個物體還是100,000個?讀/寫是在啓動/關閉時發生,通過用戶的選擇還是每87毫秒自動執行一次? –

+0

我不介意它在xml中,但如果這是不可能的,那麼我可以在其他東西中寫入它,並在稍後將整個對象拉出來。 –

回答

6

嗯,我認爲,你想要寫對象直接到

public static void serializeDataOut(IHandler ish)throws IOException{ 
    String fileName= "Test.txt"; 
    FileOutputStream fos = new FileOutputStream(fileName); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 
    oos.writeObject(ish); 
    oos.close(); 
} 

public static IHandler serializeDataIn(){ 
    String fileName= "Test.txt"; 
    FileInputStream fin = new FileInputStream(fileName); 
    ObjectInputStream ois = new ObjectInputStream(fin); 
    IHandler iHandler= (IHandler) ois.readObject(); 
    ois.close(); 
    return iHandler; 
} 

我只是提供的文件重要的代碼。用異常處理來實現這一點。

+2

但是該類必須實現Serializable – leet

0

是否要將IHandler寫入test.txt文件?嘗試

ObjectOutputStream oos = new ObjectOutputStream(fos); 
oos.write(IHandler); 

,如果你想從文件中讀取IHandler,需要做到這一點

ObjectInputStream ois = new ObjectInputStream(fos); 
IHandler iHandler = (IHandler) ois.readObject(); 
3

如何序列化對象的示例:

public static void writeToFile(File path, Database data) 
{ 
    try(ObjectOutputStream write= new ObjectOutputStream (new FileOutputStream(path))) 
    { 
     write.writeObject(data); 
    } 
    catch(NotSerializableException nse) 
    { 
     //do something 
    } 
    catch(IOException eio) 
    { 
     //do something 
    } 
} 


public static Object readFromFile(File path) 
{ 
    Object data = null; 

    try(ObjectInputStream inFile = new ObjectInputStream(new FileInputStream(path))) 
    { 
     data = inFile.readObject(); 
     return data; 
    } 
    catch(ClassNotFoundException cnfe) 
    { 
     //do something 
    } 
    catch(FileNotFoundException fnfe) 
    { 
     //do something 
    } 
    catch(IOException e) 
    { 
     //do something 
    } 
    return data; 
} 

欲瞭解更多信息http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html

1

可以使用的XMLDecoder/XMLEncoder將序列化JavaBean作爲XML。下面是從Oracle的Javadoc的兩類例子:

(的XMLDecoder)

XMLDecoder d = new XMLDecoder(
         new BufferedInputStream(
          new FileInputStream("Test.xml"))); 
    Object result = d.readObject(); 
    d.close(); 

(XMLEncoder)

XMLEncoder e = new XMLEncoder(
         new BufferedOutputStream(
          new FileOutputStream("Test.xml"))); 
    e.writeObject(new JButton("Hello, world")); 
    e.close(); 

請注意,您需要添加getter和setter方法,使類序列化。