0

我有以下代码:

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

4

3 回答 3

1

您想在 readLine() 返回 null 时停止,如下所示:

            String sCurrentLine;

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

        while ((sCurrentLine = br.readLine()) != null) {
            System.out.println(sCurrentLine);
        }
于 2012-10-27T09:21:26.257 回答
1

第一个 println 语句打印我的整个文件,但在第二个 println 语句旁边总是显示 0。

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

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

试试这个:

for (;;) {
    String line = br.readLine();
    if (line == null) break;
    System.out.println(line);
}
于 2012-10-27T09:22:31.420 回答
0

当 InputStream 没有阻塞时,avalabe() 返回可以读取的字节数。您的 readLine() 正在阻止该 InputStream。

于 2012-10-27T09:17:20.033 回答