Android SQLite与CSV表格的导入导出


csv表格是一种方便数据导入导出的Excel表格文件,为什么呢,因为,它只是用逗号分隔开了而已。。。。

一般从数据库读出来的一条数据都是一个实体,如果你的不是,就自己写个转换,我直接复写了toString,至于这个方法是不是用来这样做的,我就不得而知了,哈哈

toString方法:一共是6列,这样返回的就是首尾不带逗号

@Override
public String toString() {
 //收支 类别 金额 备注 日期 时间
 return class+","+type+","+cost+","+comment+","+date+","+time;
}

输出格式为:收支,类别,金额,备注,日期,时间

工具类

/**
 * Created by root on 17-8-18.
 */
public class CSVUtil {
 private static final String TAG = "info";
 private static final int RECORD_CLASSES = 0;
 private static final int RECORD_TYPE = 1;
 private static final int RECORD_COST = 2;
 private static final int RECORD_COMMENT = 3;
 private static final int RECORD_DATE = 4;
 private static final int RECORD_TIME = 5;
 private static final String DEFAULT_STATUS = "0";
 private static final int ERROR = -1;

 /**
 * 导出为CSV文件
 * @param record 对象集合
 * @param msg 文件名
 * @return true or false
 */ public static boolean exportCSV(List<Record> record, String msg) {
 //新建一个文件对象 
 File file = new File(Environment.getExternalStorageDirectory() + "/Weekly/exportData/" + getDate() + msg + ".csv");
 //判断文件是否存在
 if (!file.exists()) {
 //不存在则创建多级目录
 boolean mkdir = file.getParentFile().mkdirs();
 Log.d(TAG, "CSVUtil exportCSV mkdir: " + mkdir);
 } else {
 //存在则删除旧文件
 boolean delete = file.delete();
 Log.d(TAG, "CSVUtil exportCSV delete: " + delete);
 }
 BufferedWriter bufferedWriter=null;
 try {
 bufferedWriter = new BufferedWriter(new FileWriter(file, true));
 //第一行
 bufferedWriter.append("收支,类别,金额,备注,日期,时间");
 bufferedWriter.newLine();
 for (Record r : record) {
 bufferedWriter.append(r.toString());
 bufferedWriter.newLine();
 }
 bufferedWriter.flush();
 return true;
 } catch (IOException e) {
 e.printStackTrace();
 }finally {
 try {
 if (bufferedWriter != null) {
 bufferedWriter.close();
 }
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 return false;
 }

 /**
 * 导入到数据库
 * @param file 文件来源
 * @return 错误或者导入条数
 */ public static int importCSV(String file) {
 File csv = new File(file);
 if (!csv.exists()) {
 Log.d(TAG, "CSVUtil importCSV: file not found");
 return ERROR;
 }
 int count = -1;
 BufferedReader bufferedReader = null;
 try {
 bufferedReader = new BufferedReader(new FileReader(csv));
 String line = "";
 while ((line = bufferedReader.readLine()) != null) {
 String[] datas = line.split(",");
 if (datas.length != 6) {
 return ERROR;
 }
 //第一次存入的是列名而不是数据,需要排除
 if (count >= 0) {
 //重新存入数据库
 Record record = new Record();
 record.setClasses(datas[RECORD_CLASSES]);
 record.setType(datas[RECORD_TYPE]);
 record.setCost(datas[RECORD_COST]);
 record.setComment(datas[RECORD_COMMENT]);
 record.setDate(datas[RECORD_DATE]);
 record.setTime(datas[RECORD_TIME]);
 record.setStatus(DEFAULT_STATUS);
 record.setUUID(newUUID());
 record.save();
 }
 count++;
 }
 } catch (Exception e) {
 e.printStackTrace();
 return ERROR;
 } finally {
 try {
 if (bufferedReader != null) {
 bufferedReader.close();
 }
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 return count;
 }
}

导出结果为:

收支,类别,金额,备注,日期,时间

支出,日常饮食,10.0,日常饮食,2017-08-20,09:32

支出,日常饮食,10.0,日常饮食,2017-08-20,09:32

支出,日常饮食,10.0,日常饮食,2017-08-20,09:32

支出,日常饮食,10.0,日常饮食,2017-08-20,09:32

其实很简单,其实并不难,所以网上的数据也很少,记录下。当然可以再写复杂点什么的  ,按需求来,不秀操作。。。

声明:TIL|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA[ZH]协议进行授权

转载:转载请注明原文链接 - Android SQLite与CSV表格的导入导出


Life is very interesting. In the end, some of your greatest pains become your greatest strengths.