2011-03-01 79 views
0

我想從java文本文件中刪除一行,我已經閱讀並且似乎有幾個解決方案:刪除文件並重新創建並寫入,或寫入臨時文件並重命名它。似乎這兩種解決方案都涉及到關閉流,我可能會在這裏丟失一些簡單的東西,但是如何在關閉它後使用帶有文件的作者,是否有一些事情可以使新作家在重新創建或重命名後立即運行該文件,以便我可以修改新文件?重新創建文件並寫入新內容

例如:

我有一個文件movies.txt,我保存在該文件中的變量所有的線,收於movies.txt流,刪除movies.txt創造movies.txt,如何我可以在關閉流之後寫入新的movies.txt文件嗎?

或者,如果我重命名文件:

我已經movies.txt,我創建TEMP.TXT,寫一切從movies.txt爲temp.txt,在movies.txt靠近溪流,重命名TEMP.TXT到movies.txt,如果流關閉,如何寫入movies.txt?

+0

我必須在這裏丟失一些非常簡單的東西,我該如何重新打開流?我沒有看到任何方法將其打開。 – valon 2011-03-01 02:19:21

+0

雖然重新打開後可能需要重新放置。因此,您甚至可以在不關閉它的情況下重放該流,並用新的東西覆蓋它的內容,但這對於Java流而言可能不可行。 – davidk01 2011-03-01 02:19:42

回答

2

你的臨時文件的方法可能會更容易。 假設你想從文件中刪除第n行,這裏是你要遵循的步驟。

  • 創建目標文件
  • 讀者創建一個作家到一個臨時文件
  • 閱讀從源文件中的每一行並寫入到臨時文件< ---這樣做N-1次
  • 跳過第n行
  • 從源文件讀取每行並寫入臨時文件直到源文件結束。
  • 關閉源文件閱讀器和臨時文件編寫器。
  • 刪除源文件並將臨時文件重命名爲源文件的名稱。
0

我在想,你在想,如果你重新打開文件寫入,你會打破它的當前內容。

這通常是正確的,但您也可以在寫入附加模式下打開文件;例如使用this constructor

FileOutputStream fos = new FileOutputStream("file.txt", true); 

這會導致輸出被寫入文件末尾(如果它已存在)。

(可能有其他方法可以做到這一點,但是這是一個簡單的方法。)

相關問題