2015-05-23 57 views
1

我有一個對象數組。我想將該對象寫入文本文件,然後將對象讀回到數組中。我應該怎麼做? 使用序列化。如何在Java中讀取和寫入對象到文本文件?

反序列化不工作:

public static void readdata(){ 
     ObjectInputStream input = null; 
     try { 
      input = new ObjectInputStream(new FileInputStream("myfile.txt")); // getting end of file exception here 
     } catch (FileNotFoundException e1) { 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     try { 
      array = (players[]) input.readObject(); // null pointer exception here 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 




    } 

    public static void main(String[] args) { 
      readdata(); 
writedata(); 
    } 
+2

閱讀關於序列化和應用.. – Prashant

+0

在閱讀文件時出現問題。寫作工作。 – Sam

+0

當然你可以比「不工作」更具體嗎?拋出異常嗎?如果是這樣,堆棧跟蹤是什麼? – meriton

回答

0

據我所知,Java不給你一個簡單的方法來對任意對象做到這一點。因此,請考慮限制自己的數組Serializable

如果您必須處理的對象是您自己的類,並且您因此希望這些類實現java.io.Serializable接口,請仔細閱讀'contract' it comes with,因爲不是所有必須保證的類都將以編程方式強制執行編譯時間。 (所以,如果你的類實現Serializable沒有完全跟隨它帶來的條件下,你可能會得到運行時錯誤或只是「錯誤」,也許難以檢測運行時的行爲。)

(參見相關best practices

+0

我得到endoffile異常和nullpointer異常 ObjectInputStream input = null; input = new ObjectInputStream(new FileInputStream(「myfile.txt」)); //文件結尾 array =(players [])input.readObject(); //空指針 這裏有什麼不對 – Sam

+0

評論中的代碼不是很清晰。考慮將它編輯成你的問題,或者在適當的時候用它提出一個新的問題。 –

2

將對象轉換爲字符串的過程稱爲序列化和反序列化。爲了序列化一個對象,它應該實現Serializable接口。大多數內置數據類型和數據結構默認是可序列化的,只有某些類不可序列化(例如Socket不可序列化)。

所以首先你應該讓你的類Serializable接口

class Student implements java.io.Serializable { 
    String name; 
    String studentId; 
    float gpa; 
    transient String thisFieldWontBeSerialized; 
} 

的,你可以使用ObjectOutputStream序列化,並寫入文件:

public class Writer { 
    static void writeToFile(String fileName, Student[] students) throws IOException { 
     File f = new File(fileName); 
     ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f)); 
     oos.writeObject(students); 
     oos.flush(); 
     oos.close(); 
    } 
} 

ObjectInputStream可以用類似的使用從文件讀回數組的方式。