Java filereader буферизованный читатель, распечатывающий определенное количество строк - PullRequest
1 голос
/ 14 октября 2010

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

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

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

...

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

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

Ответы [ 4 ]

2 голосов
/ 14 октября 2010

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

while ( count < 100  && (s = br.readLine()) != null) {
   System.out.println(s);
   count++;
  }
2 голосов
/ 14 октября 2010

Вам нужно объединить ваши условия while

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

(РЕДАКТИРОВАТЬ: как упоминал Джонбк, проверка счета должна быть < 100)

1 голос
/ 14 октября 2010

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

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

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

1 голос
/ 14 октября 2010

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

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

Возможно

...