在java中读取文件是再平常不过了,而读txt文件又是最简单最基本的。刚接触java时就写过读取txt文件的代码,无非就是那几句:
String filepath = "";
try{
File file = new File(filepath);
FileInputStream fis = new FileInputStream(file);
InpuitStreamReader isr = new InputStreamReader(fis,"UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = null;
while((line=br.readLine())!=null){
//执行操作
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(br != null){
br.close();
}
if(isr != null){
isr.close();
}
if(fis != null){
fis.close();
}
}
然而最近在写一个项目要将txt文件入库并在浏览器上显示导入的东西时,出奇地发现有时候会出现导入的数据第一行内容不对,无缘无故多了一个中文的"?",其他行内容都是ok的。如下图
带着疑问我用EditPlus打开了导入的文件(之前都是用windows自带的记事本打开的),查看文件的十六进制码。原文件内容如下图:
其十六进制码显示如下:
我们可以发现在文件的第一行多了"EF BB BF"三个数字,而后面的73,61....就是正常的内容,那么这三个数字到底是什么呢?我就把非ASCII码字符也显示出来,如下图:
原来库里的"?"就是显示那个非ASCII字符,既然是非ASCII码字符未作任何处理,在库里存储肯定是以乱码的"?"来表示了。为此我又打开了一份内容一致保存正常的文件,也查看其十六进制码,如下图: