1
public static void main(String[] args) {
    // TODO Auto-generated method stub

    BufferedReader br1 = null;
    try {
        br1= new BufferedReader(new FileReader(new File("D:\\Users\\qding\\Desktop\\spy.log")));
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    String str1;
    try {
        while((str1 = br1.readLine()) != null){
            str1 = br1.readLine();
            System.out.println(str1);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally{
        try {
            br1.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

ファイルの内容は9行ですが、結果には偶数行の内容のみが表示され、最後の行はnullとして表示されます。では、なぜこのメソッドはファイルの偶数行のみを読み取るのでしょうか。とても奇妙....

4

4 に答える 4

8

これは、readLineメソッドを2回呼び出しており、各呼び出しが基になるソースから新しい行を読み取るためです(もちろん存在する場合)。ここでの解決策は、ループstr1から変数を使用し、を2回目に呼び出さないことです。whilereadLine

于 2012-06-16T07:17:45.160 に答える
7

あなたのコードで

while((str1 = br1.readLine()) != null){   // <= 1
    str1 = br1.readLine();                // <= 2
    System.out.println(str1);
}

1回のループ反復で1行を2回読み取っています。2行目を削除すると機能します。

于 2012-06-16T07:18:20.120 に答える
4

この行を2回読んだことに注意してください。1回
は「while」宣言で、もう1回はループ内です。
'str1 = br1.readLine();'を削除します 'while'ループの最初の行。

于 2012-06-16T07:17:49.793 に答える
3

2回使用readLine()するため、次のように変更する必要があります

str1 =  br1.readLine();
while(str1 != null){
        System.out.println(str1);
        str1 = br1.readLine();            
    }
于 2012-06-16T07:19:51.380 に答える