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