我的代码需要读入所有文件。目前我正在使用以下代码:
BufferedReader r = new BufferedReader(new FileReader(myFile));
while (r.ready()) {
String s = r.readLine();
// do something with s
}
r.close();
但是,如果文件当前为空,s
则为空,这不好。是否有任何Reader
方法atEOF()
或等效方法?
文档说:
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。
使用这个功能:
public static boolean eof(Reader r) throws IOException {
r.mark(1);
int i = r.read();
r.reset();
return i < 0;
}
您尝试做的标准模式是:
BufferedReader r = new BufferedReader(new FileReader(myFile));
String s = r.readLine();
while (s != null) {
// do something with s
s = r.readLine();
}
r.close();
ready() 方法将不起作用。您必须从流中读取并检查返回值以查看您是否处于 EOF。