2011-01-24 81 views

回答

4

要做到這一點,你需要是固定長度的線(實現的細節應該是在這種情況下明顯)或信息有多少行有,在裏面有什麼偏移(可選,獲得更好的性能)他們開始的文件(各種索引)。

對於小文件,只要需要隨機行,就可以根據需要創建這樣的索引。爲了有效地處理大文件,你需要持續保持索引,也許在一個單獨的文件中。

如果行長度大致相同,並且不需要完美的「隨機性」,那麼也可以在文件中選擇一個隨機字節偏移並掃描最近的換行符。

8

你想要的是一個LineNumberReader

您可以使用方法setLineNumber()移動到文件中的隨機位置。

LineNumberReader rdr; 
int numLines; 
Random r = new Random(); 
rdr.setLineNumber(r.nextInt(numLines)); 
String theLine = rdr.readLine(); 
+1

+1。這比我準備提供的答案要好得多。我不知道這個班是否存在。 – McStretch 2011-01-24 18:33:02

+0

@McStretch,謝謝。該類對這種操作非常有用。 (但通常有更好的類使用) – jjnguy 2011-01-24 18:34:17

+0

這絕對有效,但你必須記住,每行讀取意味着讀取文件開頭和該行之間的所有行。 – 2011-01-24 18:35:11

2

一個老式的答案: 如果你獲得了一個空,回想起剛纔的方法

BufferedReader br = new BufferedReader(file); 
Random rng = new Random (8732467834324L); 
String s = br.readLine(); 
for (; s != null ; s = br.readLine()) 
    if (rng.nextDouble() < 0.2) 
     break; 
br.close(); 
return s;