2012-11-15 90 views
0

我想用Java更新文本文件的特定部分。我希望能夠通過文件掃描並選擇特定的線路進行更新,有點像在一個數據庫中,例如指定的文件:Java - 覆蓋文件的特定部分

ID Value 
1 100 
2 500 
4 20 

我想插入3和更新4,如

ID Value 
1 100 
2 500 
3 80 
4 1000 

有沒有辦法實現這個(看似)簡單的任務?我知道你可以追加到一個文件,但我更感興趣的是隨機存取

+3

我會建議它,因爲沒人會:)繼續前進,並得到一個適當的數據庫。 – Randy

回答

1

我知道你可以追加到一個文件中,但我更感興趣的是隨機存取

您試圖插入和刪除文件中間的字節。你不能那樣做。文件系統根本不支持(通常)。您可以覆蓋特定字節,但不能插入或刪除它們。

你可以更新的具體記錄與隨機存取如果您記錄進行了固定長度(以字節爲單位),但看起來事實並非如此。

您可以將整個文件加載到內存中,也可以從原始文件中讀取,根據每行數據適當地寫入舊數據或新數據。

1

將文件加載到內存中,改變你的價值,然後重新寫文件

,如果有要插入的方式沒有加載它的文件,我沒有聽說過它。您必須首先將其他數據移出。

,除非你正在處理大文件,通常情況下,性能是不是一個太大的關注

1

您可以使用Java中的隨機訪問文件進行此操作,您可以使用可用的方法放置當前的寫入和讀取位置。你可以探索更多here

+1

這種方法的問題是,如果我想覆蓋一個長度爲1個字符且有10個字符的行,這將會簡單地覆蓋下一行的9個字符 – Bober02

0

正如前面的答案所說,這是不可能做到使用流的symply。您可以嘗試使用屬性,它們是可以在文本文件中保存和修改的關鍵值對。 例如,您可以添加到文件的新屬性與命令

setProperty(String key, String value) 

這種方法增加了一個新的屬性,或者,如果已經存在,修改與已選定的鍵的屬性的值。

顯然,在文件的末尾添加了新屬性,但缺乏排序並不是性能問題,因爲使用調用Hashtable方法的getProperty方法訪問文件。

請參見本教程的一些例子:

http://docs.oracle.com/javase/tutorial/essential/environment/properties.html