我的代码需要读入所有文件。目前我正在使用以下代码:
BufferedReader r = new BufferedReader(new FileReader(myFile));
while (r.ready()) {
String s = r.readLine();
// do something with s
}
r.close();
如果文件当前为空,那么s
为空,这不好。是否有任何Reader
具有atEOF()
方法或等效方法?
答案 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。