如何查看读者是否在EOF?

时间:2010-09-15 01:35:45

标签: java eof

我的代码需要读入所有文件。目前我正在使用以下代码:

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

如果文件当前为空,那么s为空,这不好。是否有任何Reader具有atEOF()方法或等效方法?

4 个答案:

答案 0 :(得分:4)

docs说:

public int read() throws IOException
返回: 字符读取为0到65535(0x00-0xffff)范围内的整数,或者如果已到达流末尾则为-1。

因此,在阅读器的情况下,应该检查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上返回null。

答案 1 :(得分:1)

您尝试做的标准模式是:

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

答案 2 :(得分:1)

使用此功能:

public static boolean eof(Reader r) throws IOException {
    r.mark(1);
    int i = r.read();
    r.reset();
    return i < 0;
}

答案 3 :(得分:0)

ready()方法不起作用。您必须从流中读取并检查返回值以查看您是否在EOF。