8

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

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 回答 4

5

文档说:

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。

于 2015-02-27T09:08:13.987 回答
3

使用这个功能:

public static boolean eof(Reader r) throws IOException {
    r.mark(1);
    int i = r.read();
    r.reset();
    return i < 0;
}
于 2015-10-02T04:38:27.500 回答
1

您尝试做的标准模式是:

BufferedReader r = new BufferedReader(new FileReader(myFile));
String s = r.readLine();
while (s != null) {
    // do something with s
    s = r.readLine();
}
r.close();
于 2010-09-15T01:39:52.320 回答
0

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

于 2010-09-15T02:08:59.667 回答