csv文件是一种表格形式的文件,如果把文件后缀名改为.txt,会发现同一行数据之间是用英文“,”隔开的。
如何读取csv文件以便把数据存入数据库呢,特别是csv文件中有些数据是空?
csv文件如下:
把文件后缀名改为.txt后如下:
电表id,电表编号,模块地址,描述,所属站点名称,所属站点联系人,所属站点联系电话,所属站点地址
343433,3434,3434434,,45454,4545,,
2222222,555555,11111111,,44444444,111111111,11144411666,44444444
333333,3333399,33333333,,4333334,2222222,11111783487,6666666
78737777,8888888,44444444,,45454,4545,,
解析csv文件有专门的解析包,这里不做赘述。现在用一个简单的方法就能解析csv文件。代码如下:
//读取CSV文件
public static List readCSV(String path,Activity activity){
List list=new ArrayList();
File file=new File(path);
if (!file.exists()) {
file.mkdirs();
}
FileInputStream fiStream;
Scanner scanner;
try {
fiStream=new FileInputStream(file);
scanner=new Scanner(fiStream,"UTF-8");
scanner.nextLine();//读下一行,把表头越过。不注释的话第一行数据就越过去了
int a=0;
while (scanner.hasNextLine()) {
String sourceString = scanner.nextLine();
Log.e("source-->", sourceString);
Pattern pattern = Pattern.compile("[^,]*,");
Matcher matcher = pattern.matcher(sourceString);
String[] lines=new String[8];
int i=0;
while(matcher.find()) {
String find = matcher.group().replace(",", "");
lines[i]=find.trim();
Log.e(TAG, "find="+find+",i="+i+",lines="+lines[i]);
i++;
}
ModuleAddressBean bean = new ModuleAddressBean(a,lines[0],lines[1],lines[2],lines[3],lines[4],lines[5],lines[6],lines[7],0);
list.add(bean);
a++;
i=0;
}
} catch (NumberFormatException e) {
showToast(activity, "NumberFormatException");
e.printStackTrace();
} catch (FileNotFoundException e) {
showToast(activity, "文件不存在");
e.printStackTrace();
}
return list;
}