2010-08-10 89 views
0

我想從文本文件中讀取第1行,第4行,第7行等(每行3行),但不知道如何執行此操作,因爲nextLine()會按順序讀取所有內容。謝謝你的建議?從文本文件中讀取某些行

Scanner in2 = new Scanner(new File("url.txt")); 

while (in2.hasNextLine()) { 
    // Need some condition here 
    String filesURL = in2.nextLine(); 
} 

回答

2

如果你不已經有一個索引,告訴您該文件偏移,其中每行文件中開始,然後找到每一行的唯一方法是讀取文件順序。

你確定目標不只是輸出/第1,第4,第7等行嗎?您可以順序讀取所有行,但只保留您感興趣的行。

8

使用計數器和%(模數)運算符,因此只讀取每第三行。

Scanner in = new Scanner(new File("url.txt")); 

int i = 1; 

while (in.hasNextLine()) { 
    // Read the line first 
    String filesURL = in.nextLine(); 

    /* 
    * 1 divided by 3 gives a remainder of 1 
    * 2 divided by 3 gives a remainder of 2 
    * 3 divided by 3 gives a remainder of 0 
    * 4 divided by 3 gives a remainder of 1 
    * and so on... 
    * 
    * i++ here just ensures i goes up by 1 every time this chunk of code runs. 
    */ 
    if (i++ % 3 == 1) { 
     // On every third line, do stuff; here I just print it 
     System.out.println(filesURL); 
    } 
} 
+2

+1不錯,但破壞教育的方式。哦,至少我還會得到報酬...... – karim79 2010-08-10 23:53:03

+1

@ karim79:我評論了我的代碼,以解釋操作員如何工作,如果有幫助... – BoltClock 2010-08-10 23:54:02

+1

錯誤,那將只讀取一行,每隔三次通過循環,並且每一行處理一行(如果處理在「if」中)或每處理三行(如果它在「if」之外)。 – paxdiablo 2010-08-10 23:56:08

5

閱讀每一行,但只有過程每第三個:

int lineNo = 0; 
while (in2.hasNextLine()) { 
    String filesURL = in2.nextLine(); 
    if (lineNo == 0) 
     processLine (filesURL); 
    lineNo = (lineNo + 1) % 3; 
} 

lineNo = (lineNo + 1) % 3將循環lineNo通過0,1,2,0,1,2,0,1,2,...和線條將只當它處理了零(所以線1, 4,7,...)。

+0

+1在我的答案中發現錯誤並提供正確的代碼:) – BoltClock 2010-08-11 00:01:08