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。 那么为什么这个方法只读取文件的偶数行? 太奇怪了......
答案 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();
}