1. 程式人生 > >android讀取csv檔案資料

android讀取csv檔案資料

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<ModuleAddressBean> readCSV(String path,Activity activity){
	List<ModuleAddressBean> list=new ArrayList<ModuleAddressBean>();
	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;
}