Как узнать, есть ли Reader на EOF? - PullRequest
9 голосов
/ 15 сентября 2010

Мой код должен быть прочитан во всем файле. В настоящее время я использую следующий код:

BufferedReader r = new BufferedReader(new FileReader(myFile));
while (r.ready()) {
  String s = r.readLine();
  // do something with s
}
r.close();

Если файл в настоящее время пуст, тем не менее, s равно нулю, что не годится. Есть ли у Reader метод atEOF() или его эквивалент?

Ответы [ 4 ]

4 голосов
/ 27 февраля 2015

документы говорят:

public int read() throws IOException Возвращает: символ читается как целое число в диапазоне от 0 до 65535 (0x00-0xffff) или -1, если достигнут конец потока.

Так в случаеReader следует проверять на EOF, например

// Reader r = ...;
int c;
while (-1 != (c=r.read()) {
    // use c
}

. В случае BufferedReader и readLine () это может быть

String s;
while (null != (s=br.readLine())) {
    // use s
}

, потому что readLine () возвращает ноль на EOF.

1 голос
/ 02 октября 2015

Используйте эту функцию:

public static boolean eof(Reader r) throws IOException {
    r.mark(1);
    int i = r.read();
    r.reset();
    return i < 0;
}
1 голос
/ 15 сентября 2010

Стандартный шаблон для того, что вы пытаетесь сделать, это:

BufferedReader r = new BufferedReader(new FileReader(myFile));
String s = r.readLine();
while (s != null) {
    // do something with s
    s = r.readLine();
}
r.close();
0 голосов
/ 15 сентября 2010

метод ready () не будет работать.Вы должны прочитать из потока и проверить возвращаемое значение, чтобы увидеть, находитесь ли вы в EOF.

...