文件阅读器只读取文件的偶数行

时间:2012-06-16 07:15:06

标签: java filestream

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();
        }
    }
}

文件内容有九行,但结果只显示偶数行内容, 最后一行为null。 那么为什么这个方法只读取文件的偶数行? 太奇怪了......

4 个答案:

答案 0 :(得分:8)

这是因为您正在调用readLine方法两次,并且每次调用都从底层源读取一个新行(如果它当然存在)。这里的解决方案只是使用str1循环中的while变量,而不是第二次调用readLine

答案 1 :(得分:7)

在您的代码中

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

您在一次循环迭代中读取一行两次。删除第2行,它将起作用。

答案 2 :(得分:4)

请注意,您已阅读该行两次:
一次进入'while'声明,一次进入循环。
删除'str1 = br1.readLine();'在'while'循环的第一行。

答案 3 :(得分:3)

因为您使用readLine()两次。您应该按照以下修改

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