在Java基础的过程中,我们会学习到文件IO这个知识点,而综合目前的状况来看,文件IO也是很多公司笔试、面试的一个比较喜欢提到的一个知识点,相应的,许多招聘岗位也明确要求应聘者必须具备能够熟练运用像文件IO这种基础知识的能力。今天,要说的是文件IO中的一个小知识点————br.readLine()读取文件,出现整行字符丢失
下面是一个简单的例子,如不恰当,请多多指教!!!
当使用br.readLine()来做条件时
package fileIO;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file=new File("F:"+File.separator+"XXX"+File.separator+"score.txt");
InputStream in=null;
BufferedReader br=null;
try {
in = new FileInputStream(file);
br=new BufferedReader(new InputStreamReader(in, "gbk"));
String str=null;
//读取文件内容
while(br.readLine()!=null) {
str=br.readLine();//这里写法看似没问题,实际上已经造成了结果第一行字符丢失的问题
System.out.println(str);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(in!=null)in.close();
if(br!=null)br.close();
}
}
}
是什么原因造成了文本内容的第一行整行字符丢失的问题呢?其实就是这两句代码的问题
//读取文件内容
while(br.readLine()!=null) {
str=br.readLine();
System.out.println(str);
}
在while的判断条件中: br.readLine()!=null 作为判断条件,已经进行了一次读取,所以此时br.readLine()所读取的内容就是文本文件中的第一行内容, 而紧接着循环体中,又将 str=br.readLine(),这里str的值是br.readLine()第二次执行的值,对应的也就是上次被读取行的下一行内容,当打印语句第一次输出时,输出的其实是br.readLine()第二次读取的文本内容,因此才会出现第一行整行丢失的情况。
将代码改成如下,就能解决该问题
//读取文件内容
while((str=br.readLine())!=null) { //这样既是判断条件,也获取到了第一行的内容
System.out.println(str); //直接打印
}
这种问题其实并不多见,一般新手在没有仔细考虑代码逻辑的情况下可能会出现,此外br.read()等方法也会出现这种现象,原理都是一样的,写代码还是要多多细心,考虑周全!
探讨Java中使用BufferedReader的readLine()方法读取文件时,可能导致首行数据丢失的问题及其解决办法。
1420

被折叠的 条评论
为什么被折叠?



