2011-05-02 272 views
7

我有一個包含近6000行的LONG .txt文件!有時我需要檢索信息。在5000行。是否有可能從第5000行開始閱讀而不是從頭開始閱讀?使BufferedReader從.txt文件的中間開始而不是開始?

謝謝。

+1

在Java中,6000行並不足以擔心。由於最大的成本是訪問磁盤,它不會節省您很多時間。 〜10毫秒。其他一切都比較小。 – 2011-05-02 10:00:25

回答

3

無論6000線長或不取決於平均線的長度。即使每行有100個字符,這也不是很長。

不過,如果您知道行5000開始的位置,則可以從行5000讀取。不幸的是,大多數時候你必須閱讀1到4999行才能找到答案。

+0

我想要開始獲取文本的固定位置,例如:行數:1到7,8到300,301到500 ...所以我想知道是否有一種方法可以從一個位置開始.. – Omar 2011-05-02 10:02:32

+0

@Omar,閱讀Peter的評論。只需逐行瀏覽這個小文件。雖然可以將文件定位在給定的字節偏移量,但是沒有簡單的方法可以從行號計算字節偏移量 - 即使每行的字符長度相同,仍然不知道它有多少個字節。 – Ingo 2011-05-02 10:08:31

0

我相信在java中有一個BufferedReader的跳過方法,它允許你跳過x個字符。去特定的線路是很難的。

編輯:Found it

+0

線條的長度不固定,所以不會幫助我= \ – Omar 2011-05-02 09:57:32

+0

這就是我的想法。如果文本文件是一個日誌或類似的東西,其中前4999行不改變,那麼它可能是值得緩存(如果這是正確的詞使用)的第5000行的位置,並讀取它完全緩存不'建成。 – Matt 2011-05-02 10:03:13

2

5000線是沒有那麼大,它會做一個順序文件訪問,這個簡單的想法可以工作:

BufferedReader in = new BufferedReader(new InputStreamReader(fileName)); 
for (int i = 0; i < 5000 && in.ready; in.readLine()) { } 
if (in.ready()) { 
    // you are at line 5000; 
} else { 
    // the file is smaller than 5000 lines 
} 

另一個想法是使用bufferedRead.skip(n)的方法,但對於它的每一行應該有相同的長度。舉例來說,每行有100個字符,你需要這樣做:

int ls = System.getProperty("line.separator").length(); 
in.skip((100 + ls) * 5000); 
+0

線條不是相同的長度..我會使用第一個解決方案,然而,我認爲從5000線閱讀是巨大的!..謝謝。 – Omar 2011-05-02 10:05:40

+0

如果它們的大小相同,則BufferedRead跳過將會正常工作,只是不要忘記行分隔符。 – Pih 2011-05-02 10:08:32

相關問題