2014-10-05 60 views
0

我有一個Java程序需要輸出到文件。覆蓋Java中的部分文本文件

此輸出文件具有固定結構,比方說,一個,一個START線,我的輸出,一個END線和頁腳

每次我運行我的程序時,我都希望它在這些START-END部分之間寫入輸出。如果有一些文字,我想它覆蓋它。

現在,我正在逐行閱讀,直到我檢測到開始行,然後我寫我的輸出。正如我之前所說,輸出後有一個「END」行。

我懷疑是我怎麼能覆蓋STARTEND(舊輸出),每執行(新的輸出)之間的文本。

+0

你的代碼在哪裏?你期望它做什麼,它做什麼呢? – 2014-10-05 17:21:56

+0

找到* START *行之後,我可以找到要寫入的起點。第二次運行程序時,如果它是這樣的話,它只是在新的輸出之前追加新的輸出(緊接在起點之後)。 – 2014-10-05 17:38:58

+0

我們無法找到代碼中的錯誤,並建議如何解決它,而無需查看代碼。發佈您的代碼。 – 2014-10-05 17:46:27

回答

1

您是否熟悉RandomAccessFile職業?我假設你在Header + START和END + Footer標記之間寫入了可變長度的主體?這意味着你不能只是覆蓋正文部分,並期望拖尾字節被推進。

也許最簡單的實現方式就是你如何開始實現它。

  • 開放的RandomAccessFile訪問
  • 查找或跳到START指數年底,記得指數
  • 從落後,直到找到結束索引的開頭,結尾讀取的字節,字節被投入到tailBuffer而落後的閱讀(向後由於命令反向讀 - 寫)
  • 尋求回STARTINDEX + 1的位置和寫入新的主體的字節至起始塊的端
  • 呼叫raf.setLength(startLen + bodylen + endLen)來修整或相應地延長一個新的文件長度
  • 寫tailBuffer到文件末尾,確保寫在一個正確的順序

相反這可能是一種方式來實現這一點,或者只是看什麼到RAM中查找索引,以新的內容overwite文件。如果RAM不是問題,這很好。