java fileinputstream可用方法返回始终为零

时间:2012-10-27 09:00:52

标签: 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语句总是显示0.为什么当有实际内容要读时,它是否显示为0? 我该把什么作为最终条件放在这里。

3 个答案:

答案 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);
}