2013-05-01 63 views
0

我有一個程序將通過並創建多個不同的類實例。我想用DataOutputStream將每個實例的詳細信息寫入文件(這是一個必要的練習,我將在後面討論其他方式),但問題是我注意到每次新實例出現時DataOutputStream都會覆蓋文件創建和書寫。我的第一個想法是每次寫入新實例時,首先使用DataInputStream獲取文件中的內容,保存它,然後用新實例重寫它。這似乎很快就會讓人困惑。對於這樣的事情,最佳做法是什麼?提前致謝。使用DataOutput/InputStream管理文件字節

編輯:我會嘗試和更具體一點,我想在這裏做什麼。 當我將要寫入該文件的類取出時,首先使用dataInputStream.readFully來獲取文件中的所有內容。我的理解是將文件中的所有字節存儲在一個數組中。我想將它與類實例進行比較,如果實例與文件中已有的東西相匹配,則不要將此特定實例(因爲它已經存在)輸出到文件中。否則,追加到文件。

回答

0

當您打開文件進行寫入時,使用FileOutputStream(File file, boolean append)構造函數。例如:

File f = new File("C:\data.txt"); 
FileOutputStream fos = new FileOutputStream(f, true); // open file for appending 
DataOutputStream dos = new DataOutputStream(fos); 
// anything written to dos after this point will be appended 

如果你只是需要序列化你的對象,我會強烈建議使用JAXB或其他序列/編組API,而不是另起爐竈。您可能會節省大量時間。

+0

我假設這沒有重複檢查(只是不斷增長的文件)?我需要寫些東西來擺脫困境。 – Benny 2013-05-01 21:54:21

+0

這純粹追加到現有文件的最後。如果您有其他想法,我會建議編輯您的問題或提出一個新問題,包括對期望或期望行爲的更詳細解釋(僞代碼或代碼也有幫助)。但是,您可能還想調查JAXB或JavaBean序列化或其他類似的API,因爲它們已經解決了您試圖解決的根本問題(將數據序列化到磁盤)。 – rob 2013-05-01 22:32:43

+0

我會完全使用序列化,但這是我試圖通過的一個特定練習。我編輯了這個問題,試圖更好地解釋。謝謝 – Benny 2013-05-01 22:50:21