最近项目组在做Android性能自动化相关的工作,其中涉及到了将最终获取的数据按照特定格式存储。查了相关的资料,发现csv格式的文件操作比较简便,就使用该文件格式存储相关的测试数据。虽然只是一个小小的存储文件处理,还是遇到了几个坑,记录下来。
CSV文件,(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),文件以纯文本形式存储表格数据(数字和文本)。这种格式的文件能够直接使用记事本或者Excel打开,也可以直接导入数据库哦~~
JAVA中已经有处理csv文件的开源库了,直接拿来使用就好。先看下写csv文件的CSVWriter的使用吧。主要做的处理是:存储数据只需要将测试获取的数据按照约定的key - value形式将测试数据写入文件,所以比较简单的实现:
1.写入某项记录,只需要调用CSVWriter的writeRecord()函数即可:
//将背景运行下的消耗流量写入文件
public static void writeTrafficInBackground(double traffic){
try {
//判断目标文件是否存在
boolean exists = isFileExists();
CsvWriter writer = new CsvWriter(new FileWriter(new File(resultPath,resultName),true),',');
if(!exists){
String[] title = new String[]{Mars_key,Mars_value};
writer.writeRecord(title);
}
String[] content = new String[]{Traffic_LongTime, String.valueOf(traffic)};
writer.writeRecord(content);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
写入的每条记录都是一个string[]类型的数据,写入内容会自动为每条记录中的String 后加入对应的分隔符。CsvWriter writer = new CsvWriter(new FileWriter(new File(resultPath,resultName),true),',');先声明一个文件resultPath/resultName,并且分隔符为‘,’,该符号可以换成其他的符号,默认也是逗号。和一般的写入流一样,write之后要记得flush()或者close()。调用close()时候默认会先flush的,如果不显示的调用flush或close,这些值是一直存在于缓存中不会写入文件的。
2.如果是新建文件,直接使用new FileWriter(new File(resultPath,resultName),true)即可,如果需要在已有文件中添加新的 内容,需要在FileWriter的构造函数中第二个参数为true,即new FileWriter(new File(resultPath,resultName),true) ,FileWriter的构造函数中第二个参数为true时表示已添加的方式打开文件,如果文件存在,会直接在文件后添加内容,否则会创建文件。
3.哒哒,这样就可以新建相关csv文件了,也可以给已存在的文件追加内容了。可是,当文件对应的目录不存在时,不能够成功创建相关文件。可以先检查resultPath是否存在,不存在的话先调用path.mkdir创建相关目录。
public static boolean isFileExists(){
//如果相关路径不存在,
File path = new File(resultPath);
if(!path.exists()){
if(path.mkdir()){
return true;
}else{
return false;
}
}
File file=new File(resultPath,resultName);
return file.exists();
}
4.在写文件时遇到一个大坑,开始resultPath直接写的“/sdcard/***”,ADT中提示建议不要使用硬编码的方式写SDcard路径,而是使用“
Environment.getExternalStorageDirectory().getPath() ”来替代,遂使用该方法。但中间创建文件一直不成功。添加了相关的读写权限,仍没有解决该问题。后来,后来发现,是在添加了Environment.getExternalStorageDirectory().getPath() ”路径之后少了一个“/”。被坑死。。。。
请大家多多指教哦~~
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。