android 将SQLite数据库的表格导出为csv格式,并解析csv文件
2015-04-08 12:17
639 查看
在做android的开发的时候,将数据保存到SQLite数据库中,有时候会要将保存的这些数据导出成excel表格,这样更方便查看。通过查找资料,可以将数据库中的表格转化成
csv(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号)这种以纯文本的模式保存表格。还是以以前写的一个模板来实现点击打开链接,这里就不放这个的代码了,直接说将表格转化成csv格式导出。
isi.java
上面有很多代码都是以前保存选项信息的代码,主要是最后一个方法实现格式的转化。
要在AndroidManifest.xml加上一句对文件的允许对sd卡可写
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
最后得到的文件名为test_table.csv,用excel打开得到的表格如下:
![](http://img.blog.csdn.net/20150408140447490?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbmZlbmdkZWp1YW5saWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
数据完整的转化成了excel表格了。
然后是解析csv文件,这个没有布局文件,
Mainactivity.java,由于csv文件是用“,”分开的,在程序中就可以利用“,”将其分割开。
:
![](http://img.blog.csdn.net/20150408141238096?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbmZlbmdkZWp1YW5saWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这样数据就完整的转换过来了。
csv(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号)这种以纯文本的模式保存表格。还是以以前写的一个模板来实现点击打开链接,这里就不放这个的代码了,直接说将表格转化成csv格式导出。
isi.java
package com.example.project_isi; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.Window; import android.widget.Button; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; public class ISIActivity extends Activity{ private RelativeLayout rl; private RelativeLayout rl2; private int i = 0; private String[] question = {"1、入睡困难:","2、维持睡眠困难:","3、早醒:","4、您对目前的睡眠模式满意/不满意程度如何?:", "5、您认为您的失眠在多大程度上影响了您的日常功能:","6、您的失眠问题影响了您的生活质量,您觉得在别人眼中你的失眠程度如何?", "7、您对目前的睡眠问题的担心/痛苦程度:","您的得分:"}; private Button resultbutton; private int j; private String buttontext; private int resulttext[] = new int[10]; private RadioButton button01; private RadioButton button02; private RadioButton button03; private RadioButton button04; private RadioButton button05; private RadioGroup radioGroup; private TextView questiontext; private int score; private Button databutton; @Override protected void onCreate(Bundle savedInstanceState) { this.requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.isi); questiontext = (TextView) findViewById(R.id.questiontitle); radioGroup = (RadioGroup) findViewById(R.id.radiogroup); button01 = (RadioButton) findViewById(R.id.button01); button02 = (RadioButton) findViewById(R.id.button02); button03 = (RadioButton) findViewById(R.id.button03); button04 = (RadioButton) findViewById(R.id.button04); button05 = (RadioButton) findViewById(R.id.button05); databutton = (Button) findViewById(R.id.databutton); rl = (RelativeLayout) findViewById(R.id.relativeLayout); rl2 = (RelativeLayout) findViewById(R.id.relativeLayout2); radioGroup.setOnCheckedChangeListener(new RadioGroupListener()); rl.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { rl.setVisibility(View.INVISIBLE); rl2.setVisibility(View.VISIBLE); return false; } }); databutton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.setClass(ISIActivity.this, PatientInfoManage.class); startActivity(intent); } }); final Button nextbutton = (Button) findViewById(R.id.nextbutton); nextbutton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //questiontext.setText(question[i]); //i ++; if(button01.isChecked()==false && button02.isChecked()==false && button03.isChecked()==false && button04.isChecked()==false&& button05.isChecked()==false && i != 0){ new AlertDialog.Builder(ISIActivity.this) .setTitle("温馨提示") .setMessage("您还没有选择任何一个选项!") .setPositiveButton("确定", null) .show(); return; } else{ questiontext.setText(question[i]); if(i < question.length +1){ i++; } if(i == 1){ radioGroup.setVisibility(View.VISIBLE); } //i++; radioGroup.clearCheck(); } score += j; System.out.println("result----->" + score); resulttext[i]= j; System.out.println("选择的结果----》" + resulttext[i]); //PInformation(); //question[7] = "您的得分: " + score; if(i == question.length - 1){ nextbutton.setText("确定"); //score += j; int total = score +j; question[7] = "您的得分: " + total; System.out.println("您的得分---" + total); //PInformation(); //finish(); } if(i == question.length ){ //finish(); PInformation(); radioGroup.setVisibility(View.INVISIBLE); nextbutton.setVisibility(View.INVISIBLE); } } }); } public class RadioGroupListener implements OnCheckedChangeListener{ @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if(checkedId == button01.getId()){ j = 0; buttontext = button01.getText().toString(); System.out.println("buttontext ---" + buttontext); } if(checkedId == button02.getId()){ j = 1; System.out.println("result11----->" + j); buttontext = button02.getText().toString(); System.out.println("buttontext ---" + buttontext); } if(checkedId == button03.getId()){ j = 2; buttontext = button03.getText().toString(); System.out.println("buttontext ---" + buttontext); } if(checkedId == button04.getId()){ j = 3; buttontext = button04.getText().toString(); System.out.println("buttontext ---" + buttontext); } if(checkedId == button05.getId()){ j = 4; buttontext = button05.getText().toString(); System.out.println("buttontext ---" + buttontext); } } } //获得要保存的数据 public void PInformation(){ int[] result = new int[8]; result[0] = resulttext[2]; result[1] = resulttext[3]; result[2] = resulttext[4]; result[3] = resulttext[5]; result[4] = resulttext[6]; result[5] = resulttext[7]; result[6] = resulttext[8]; result[7] = score; String isi = ""; for(int i = 0;i < result.length;i++){ isi += String.valueOf(result[i]); } System.out.println("严重失眠指数----->" + isi); PatientTest patientTest = new PatientTest(); patientTest.setIsi(isi); PatientTestDAO ptdao = new PatientTestDAO(ISIActivity.this); //获得最大的id //PatientInformationDAO pd = new PatientInformationDAO(ISIActivity.this); ptdao.insert(patientTest); System.out.println("当前ID----" + ptdao.getMaxId()); Toast.makeText(ISIActivity.this, "【失眠程度评估】数据保存成功!", Toast.LENGTH_SHORT).show(); // //String test_table = null; Cursor c = ptdao.export(); ExportToCSV(c, "test_table.csv"); } //导出表格的方法 public void ExportToCSV(Cursor c, String fileName) { int rowCount = 0; int colCount = 0; FileWriter fw; BufferedWriter bfw; //获取sd卡根目录 File sdCardDir = Environment.getExternalStorageDirectory(); //保存文件目录 File saveFile = new File(sdCardDir, fileName); try { rowCount = c.getCount(); colCount = c.getColumnCount(); fw = new FileWriter(saveFile); bfw = new BufferedWriter(fw); if (rowCount > 0) { c.moveToFirst(); // 写入表头 for (int i = 0; i < colCount; i++) { if (i != colCount - 1) bfw.write(c.getColumnName(i) + ','); else bfw.write(c.getColumnName(i)); } // 写好表头后换行 bfw.newLine(); // 写入数据 for (int i = 0; i < rowCount; i++) { c.moveToPosition(i); // Toast.makeText(mContext, "正在导出第"+(i+1)+"条", // Toast.LENGTH_SHORT).show(); Log.v("导出数据", "正在导出第" + (i + 1) + "条"); for (int j = 0; j < colCount; j++) { if (j != colCount - 1) bfw.write(c.getString(j) + ','); else bfw.write(c.getString(j)); } // 写好每条记录后换行 bfw.newLine(); } } // 将缓存数据写入文件 bfw.flush(); // 释放缓存 bfw.close(); // Toast.makeText(mContext, "导出完毕!", Toast.LENGTH_SHORT).show(); Log.v("导出数据", "导出完毕!"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { c.close(); } } }
上面有很多代码都是以前保存选项信息的代码,主要是最后一个方法实现格式的转化。
要在AndroidManifest.xml加上一句对文件的允许对sd卡可写
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
最后得到的文件名为test_table.csv,用excel打开得到的表格如下:
数据完整的转化成了excel表格了。
然后是解析csv文件,这个没有布局文件,
Mainactivity.java,由于csv文件是用“,”分开的,在程序中就可以利用“,”将其分割开。
package com.example.testlistview; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.StringTokenizer; import android.app.Activity; import android.os.Bundle; import android.os.Environment; public class MainActivity extends Activity { //获得根目录路径 File sdCardDir = Environment.getExternalStorageDirectory(); int i = 0; int j = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { File csv = new File(sdCardDir + "/test_table.csv"); // CSV文件 BufferedReader br = new BufferedReader(new FileReader(csv)); br.readLine(); // 读取直到最后一行 String line = ""; //这一行不为空 while ((line = br.readLine()) != null) { i++; //System.out.println("line---" + line); // 把一行数据分割成多个字段 StringTokenizer st = new StringTokenizer(line, ","); //遍历所有行,并打印出来,判断有没有分隔符 while (st.hasMoreTokens()) { //j++; // 每一行的多个字段用TAB隔开表示 //s[i] = st.nextToken(); System.out.print(st.nextToken()); // System.out.println("j ---" + j); } System.out.println(); // String item[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分 // // String last = item[item.length-1];//这就是你要的数据了 // j = item.length; // System.out.println(last); } System.out.println("i----" + i); System.out.println("j----" + j); br.close(); } catch (Exception e) { // 捕获File对象生成时的异常 e.printStackTrace(); } } }最后打印出来的数据为
:
这样数据就完整的转换过来了。
相关文章推荐
- 解析表格csv格式文件
- Android将SQLite数据表导出到csv格式文件
- 导出下载csv格式的表格(逗号分隔文件)的servlet代码,留待以后调用
- Android将SQLite数据表导出到csv格式文件
- Android将SQLite数据表导出到csv格式文件
- JavaScript将页面表格数据导出为Excel、CSV格式文件(结合JQuery EasyUI的grid )
- Android将SQLite数据表导出到csv格式文件 分类: Android数据存储 2014-06-20 13:28 85人阅读 评论(0) 收藏
- Android将SQLite数据表导出到csv格式文件
- Android将SQLite数据表导出到csv格式文件 .
- Android视频文件格式解析相关分析
- .net导出EXCEL文件操作类包括格式较复杂表格导出
- CSV格式文件解析
- 怎样在Android中解析doc、docx、xls、xlsx格式文件?
- 页面数据导出CSV格式文件
- php导出csv格式文件
- Android中解析doc、docx、xls、xlsx格式文件
- CSV文件格式解析
- 导出csv格式文件
- 解析csv格式文件的一段C代码
- 在Android中解析doc,docx,xls,xlsx,pptx等格式文件