2013-01-01 65 views
0

我想將字符串寫入文本文件,每次都到文件的底部。然後,如果即時通訊在文本文件中搜索某個字符串並找到它,我想用另一個替換該行。將字符串寫入文本文件的底線

我在想:在textfile中計算行並添加+1,然後寫入我想寫入該索引的字符串。但是,甚至有可能在文本文件中寫入某個行號?

而如何更新某一行到另一個字符串?

謝謝!

+0

什麼具有u已經試過?告訴我們您的代碼,請 – DRastislav

回答

0
  1. 如果要追加的字符串,然後,FileOutputStream does have an alternate constructor您可以設置爲true,所以你可以打開附加。

  2. 如果您希望將字符串替換爲文件而不復制,則最好的方法是依靠RandomAccessFile來代替。但是,如果線路長度變化,這是不可靠的。對於固定長度的記錄,這應該是這樣的:

    • 移動到補償

你也可以「截斷」(通過setLength),所以如果有一個拖尾塊你需要擺脫,你可以放棄。

第三個解決方案是依靠mmap。這需要在整個文件的Memory-Mapped Bytebuffer上。我不考慮解決方案(它在平原C)的整體可行性,但實際上「看起來」更正確的,如果同時考慮Java平臺+操作系統

+0

如果您需要修改輸入文件,你最好去通過了「雙寫」協議而不是:它是整個上更安全。 – fge

+0

你能給我一些關於什麼是「雙重寫入協議」的建議嗎?這個概念看起來很熟悉,但我想看看我們是否在同一頁面上。 – aldrinleal

+0

我不討論安全性,而是算法和文件系統語義。可靠性問題最好留給實現者:) – aldrinleal

4

你不想做那是:這是一場災難。如果在原始文件修改過程中無法寫入文件,原始文件將被損壞。

使用雙寫協議,修改後的文件寫入到另一個文件,並僅當寫入suceeds,重命名文件的原件。

如果您的文件不是太大,對於「大」的一些定義,我建議爲目標文件創建一個List<String>:逐行讀取原始文件,添加到該列表;一旦列表處理完成(您的問題不清楚應該發生什麼),將每個String寫入其他文件,刷新並關閉,如果成功,則重命名爲原始文件。

+0

與原始問題有什麼關係?你確定你不是說那個評論去別的地方嗎? :p – fge

+0

對不起,在我完成之前點擊輸入。我正在創建一個在線滴答滴答遊戲,我有一個登錄網站,所以你必須有一個帳戶。如果您是新用戶,我們需要在文本文件的底部寫入信息(包括帳戶信息:用戶名,密碼,總贏額和總損失)。如果你不是新用戶,即。玩遊戲,我們需要更新獲勝球員的陣容和其他球員陣容。現在,我將所有行讀入一個數組列表,然後修改這些元素,然後將整個數組列表寫入文件。如果我的服務器斷開連接,那麼它現在就是問題了。 :P – Henrik

+0

[Files.readAllLines](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#readAllLines%28java.nio.file.Path,%20java .nio.charset.Charset%29)和[Files.write(Path,Iterable,Charset)](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html #寫入%28java.nio.file.Path,%20java.lang.Iterable,%20java.nio.charset.Charset,%20java.nio.file.OpenOption ...%29)方法應該使這種方法變得非常簡單。 – VGR