android中使用csv文件来存储数据中遇到的几个问题
2015-12-10 18:30
746 查看
最近项目组在做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文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
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 4层框架
- android 三种点击事件
- Android学习第四天————ListView用BaseAdapter适配器来填充数据
- Android 操作系统的内存回收机制
- Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)
- 安卓数据库activeandroid框架
- Android基础-数据库SQLite
- 更强的微光闪烁效果--第三方开源--Shimmer-android
- android listview的使用(零)
- android中的hashmap使用
- FaceBook微光闪烁---第三方开源--shimmer-android
- android ListView的使用 (二)
- android ListView的使用 (一)
- Android开发中这些小技巧你都知道吗?(四)
- android多国语言文件夹
- Android Touch事件传递机制
- 使用Apktool编译修改好的Android工程时 提示 No resource found that matches the given name '@android:style/WindowTitle
- [原] Android性能优化方法
- Android运行时异常“Binary XML file line # : Error inflating class”
- Android应用启动优化:一种DelayLoad的实现和原理