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ステートメントはファイル全体を出力しますが、2番目のprintlnステートメントと一緒に常に0が表示されます。実際に読み取るコンテンツがあるのに、なぜ0が表示されるのですか?そして、ここで終了条件として何を置くべきですか。

4

3 に答える 3

1

最初のprintlnステートメントはファイル全体を出力しますが、2番目のprintlnステートメントと一緒に常に0を表示します。

あなたはavailable()2回チェックしています。一部のデータを読み取った後は読み取ることができなくなるため、出力されるavailable()値は上記のループ条件で使用された値とは異なります。

次に、入力ストリームからのデータの独自のバッファリングを行うBufferedReaderから読み取っています。つまり、読者の背中をこっそり回り、基になる入力ストリームの使用可能なメソッドを呼び出すのは間違っているということです。

これを試して:

for (;;) {
    String line = br.readLine();
    if (line == null) break;
    System.out.println(line);
}
于 2012-10-27T09:22:31.420 に答える
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 に答える
0

availabe() は、その InputStream がブロックされていないときに読み取ることができるバイト数を返しています。readLine() がその InputStream をブロックしています。

于 2012-10-27T09:17:20.033 に答える