2012-03-17 109 views
5

ListeMot.txt文件包含336529行閱讀Java中txt文件中的一條特定行

如何捕捉特定行。

我的代碼

int getNombre() 
{ 
    nbre = (int)(Math.random()*336529); 
    return nbre ; 
} 

public String FindWord() throws IOException{ 
    String word = null; 
    int nbr= getNombre(); 
    InputStreamReader reader = null; 
    LineNumberReader lnr = null; 
    reader = new InputStreamReader(new FileInputStream("../image/ListeMot.txt")); 
    lnr = new LineNumberReader(reader); 
    word = lnr.readLine(nbr); 
} 

爲什麼我不能讓字= lnr.readLine(NBR); ??

謝謝

P.S我是新來的java!

+0

我沒有看到你有一個參數「theWord」的地方,但甚至沒有嘗試在你的代碼中使用它。 – scamexdotexe 2012-03-17 17:53:06

回答

3

要獲得第N行,您必須閱讀它之前的所有行。

如果你不止一次這樣做,最有效的做法可能是首先將所有行加載到內存中。


private final List<String> words = new ArrayList<String>(); 
private final Random random = new Random(); 

public String randomWord() throws IOException { 
    if (words.isEmpty()) { 
     BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("../image/ListeMot.txt"))); 
     String line; 
     while ((line = br.readLine()) != null) 
      words.add(line); 
     br.close(); 
    } 
    return words.get(random.nextInt(words.size())); 
} 

BTW:將意味着參數theWord使用?

+0

+1我錯了(如上所述) – MByD 2012-03-17 17:43:15

1

Java API中沒有像readLine(int lineNumber)這樣的方法。您應該閱讀特定行號的所有以前的行。我曾操縱你的第二個方法,一起來看看它:

public void FindWord() throws IOException 
{ 
    String word = ""; 
    int nbr = getNombre(); 
    InputStreamReader reader = null; 
    LineNumberReader lnr = null; 
    reader = new InputStreamReader(new FileInputStream("src/a.txt")); 
    lnr = new LineNumberReader(reader); 

    while(lnr.getLineNumber() != nbr) 
     word = lnr.readLine(); 

    System.out.println(word); 
} 

上面的代碼不出現錯誤,因爲我假設你知道在給定的文本文件中的行數,即極限,如果我們生成一個隨機數字大於實際行號,代碼將進入無限循環,要小心。

另一個問題,行號從1開始,所以我建議你改變你的隨機行數產生方法是這樣的:

int getNombre() 
{ 
    nbre = (int)(Math.random()*336529) + 1; 
    return nbre ; 
}