java fileinputstream可用方法始终返回零

java fileinputstream可用方法始终返回零,java,fileinputstream,Java,Fileinputstream,我有以下代码: 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语句一起始终

我有以下代码:

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?
我应该在这里设置什么作为结束条件。

availabe()返回输入流在不阻塞时可以读取的字节数。您的readLine()正在阻止该输入流。

当readLine()返回null时,您希望停止,如下所示:

            String sCurrentLine;

        br = new BufferedReader(new FileReader("C:\\testing.txt"));

        while ((sCurrentLine = br.readLine()) != null) {
            System.out.println(sCurrentLine);
        }
第一个println语句打印整个文件,但与第二个println语句一起始终显示0

您正在检查
available()
两次。在您读取了一些数据之后,它不再可读取,因此打印的
available()
值与上面用于循环条件的值不同

其次,您从BufferedReader读取数据,它自己对输入流中的数据进行缓冲。这意味着,在读者的背后偷偷调用底层输入流的可用方法是错误的

试试这个:

for (;;) {
    String line = br.readLine();
    if (line == null) break;
    System.out.println(line);
}

不对。它返回“无阻塞情况下可读取的字节数”。请参阅Javadoc。这与“当它不阻塞时”不同。所有的输入流都是阻塞的。博恩的答案是正确的,而且陈述也正确,但这对你答案的不正确性有何影响对我来说是个谜。好吧,我把空闲时间花在帮助这里的人上,如果你继续跟踪我的评论,继续不公正,我会报告的。对不起,你为什么要查-1?它到底在哪里说available()将返回-1?