android中使用csv文件来存储数据中遇到的几个问题

最近项目组在做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文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

你可能感兴趣的:(Android学习)