当时做一个平台的项目,由于实现的功能需要和第三方交互,数据的传输使用.csv文件形式,读取的时候按照txt文本逐行读取,项目在运行了大概有2个月的时候一切正常,有一天平台的用户取消了重新使用此功能,产生的数据文件头有特殊字符
,原因是Java在读文件时没能正确处理UTF-8文件的BOM编码,将前3个字节当作文本内容来处理了
具体处理方法:
“` java
public class TXTUtil {
/**
*
* 以行为单位读取文件,常用于读面向行的格式化文件
*
*/
public static List<String[]> readFileByLines(String fileName) {
BufferedReader reader = null;
List<String[]> list = new ArrayList<>();
try {
/*reader=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-8"));*/
reader=new BufferedReader(new InputStreamReader(new BOMInputStream(new FileInputStream(fileName)),"UTF-8"));
String tempString = null;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
if (tempString.startsWith("\uFEFF")){
tempString = tempString.replace("\uFEFF","");
}
list.add(tempString.split(","));
}
reader.close();
return list;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
return list;
}
BOMInputStream:可对BOM头进行捕捉和过滤