2012-06-03 25 views
0

iam使用BufferedReader從文件中讀取行。當我從文件中讀取所有行時,我想重新從頭讀取文件,我該怎麼做?在BufferedReader.mark()BufferedReader.reset()不工作properly.this是我的代碼如何重置BufferedReader的位置?

FileReader fR = new FileReader(this.sTargetPath); 
      final BufferedReader vcfBuffer = new BufferedReader(fR); 
     // vcfBuffer.mark(0); 
       Boolean nextLine = true; 
       while (nextLine) { 
        try { 
         String line = vcfBuffer.readLine(); 
         } 
        } catch (IOException e) { 
         nextLine = false; 
        } 
       } 
      } 

      vcfBuffer.reset(); 

我怎麼能重置BufferedReader中的位置?感謝您幫助

+3

再次創建一個新的緩衝閱讀器對象。或者使用'RandomAccesFile'' seek(0)'方法。 – Ronnie

+0

除了創建另一個閱讀器之外沒有別的辦法嗎?我不認爲這是個好主意,它可行,但效率不高? – AnasBakez

+0

我認爲你可以在閱讀第一行之前創建一個標記,然後你可以稍後使用方法reset()返回到那一點,但我之前沒有嘗試過。 – Martin

回答

1

javadoc of mark()說:(重點煤礦):

參數:

readAheadLimit - 限制對可能仍保留該標記讀取的字符數。讀取字符達到此限制或超出後嘗試重置流 可能會失敗。大於輸入緩衝區大小的限制 將導致分配大小不小於限制的新緩衝區 。因此應該小心使用較大的值 。

如果以0作爲參數調用它,只要您從閱讀器讀取更多的一個字節,就可能無法重置。

解決方案是調用mark方法,將文件的長度作爲參數。但是,當然,這將導致讀取內存緩衝區中的整個文件。如果你不想要,關閉你的閱讀器並重新打開一個新的BufferedReader。