我有以下代码:
fis = new FileInputStream(new File(st[0]));
br = new BufferedReader(new InputStreamReader(fis));
while(fis.available()!=-1)
{
System.out.println(br.readLine());
System.out.println(fis.available());
}
第一个println语句打印我的整个文件,但是第二个println语句总是显示0.为什么当有实际内容要读时,它是否显示为0? 我该把什么作为最终条件放在这里。
答案 0 :(得分:1)
你想在readLine()返回null时停止,如下所示:
String sCurrentLine;
br = new BufferedReader(new FileReader("C:\\testing.txt"));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
答案 1 :(得分:0)
availabilitybe()返回该InputStream未阻塞时可以读取的字节数。你的readLine()阻塞了InputStream。
答案 2 :(得分:0)
第一个println语句打印整个文件,但第二个println语句总是显示0。
您正在检查available()
两次。读完一些数据后,它就不再可供读取,因此打印的available()
值与上面用于循环条件的值不同。
其次,您正在从BufferedReader读取,BufferedReader从输入流中自行缓冲数据。这意味着然后潜入读者的背后调用底层输入流的可用方法是错误的!
试试这个:
for (;;) {
String line = br.readLine();
if (line == null) break;
System.out.println(line);
}