2010-10-14 1 views
1

Я пытаюсь использовать считыватель файлов и буферизованный читатель в java для печати определенного количества строк из txt-файла. Файл имеет более 100000 строк, но я просто хочу, чтобы напечатать первую 100.Буферный читатель Java filereader, распечатывающий определенное количество строк

Код я придумал выглядит следующим образом:

public class main { 
    public static void main(String args[]) throws Exception { 
     FileReader fr = new FileReader("words.txt"); 
     BufferedReader br = new BufferedReader(fr); 
     String s; 

     int count = 0; 

     while (count <101) 
      { 
      while((s = br.readLine()) != null) 

      { 
      System.out.println(s); 
      count++; 
      System.out.println(count); 
      } 

     } 
     fr.close(); 
     } 

} 

Он печатает что-то вроде этого:

it 

1 

was 

2 

a 

3 

sunny 

4 

day 

... 

и т. Д. (Напечатанное значение int только для того, чтобы я мог видеть, что счетчик увеличивался). Проблема в том, что она доходит до конца файла, а не останавливается после 100-й строки текста. Мой вопрос в том, как я могу остановить его печать после 100-й линии?

Заранее спасибо.

+0

Спасибо, ребята, я могу видеть, что это место является очень полезным в течение следующих нескольких месяцев! – user476145

+0

Вы также можете использовать LineNumberReader и проверить while (reader.getLineNumber() <101), так что вам не нужно отслеживать счет – helpermethod

ответ

1

Просто думаю, на самом деле, - но я мог бы попытаться объединить два условия:

while ((s = br.readLine()) != null && count < 100) 
     System.out.println(s + " [line: "+(count++)+"]"); 

Возможно?

+0

Не будет ли печатать 101 строку? –

+0

есть; обновлено :) –

2

Вы должны объединить свои условия в то время как

while (count < 100 && (s = br.readLine()) != null) { ... 

(EDIT: а johnbk упоминает проверку счетчика должен быть < 100)

1

Вы не хотите использовать вложенные в то время как петли, вы хотите что-то вроде

while(count < 101 && (s = br.readLine()) != null){ 

Это остановит чтение файла, как только счет будет достигнут.

2

ну, ваша внутренняя петля работает до конца файла. Вам нужно зафиксировать оба условия и, кстати, вы пытаетесь напечатать 101 строку, а не 100. Для печати 100 строк, нужно, чтобы проверить с < 100, так как счетчик инициализируется «0»

while (count < 100 && (s = br.readLine()) != null) { 
    System.out.println(s); 
    count++; 
    } 
+1

Вы правильно используете 'count <100', и ваш код будет правильно печатать 100 строк. Однако вы должны поменять порядок условий. В противном случае после того, как будет напечатана 100-я строка, еще одна строка будет считана из файла, прежде чем мы обнаружим, что счетчик достиг своего предела. – irishbuzz

+0

@irishbuzz - Спасибо ..! Я обновил порядок условий –