android 将SQLite数据库的表格导出为csv格式,并解析csv文件
在做android的开发的时候,将数据保存到SQLite数据库中,有时候会要将保存的这些数据导出成excel表格,这样更方便查看。通过查找资料,可以将数据库中的表格转化成
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;@Overrideprotected 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() {@Overridepublic boolean onTouch(View arg0, MotionEvent arg1) {rl.setVisibility(View.INVISIBLE);rl2.setVisibility(View.VISIBLE);return false;}});databutton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent();intent.setClass(ISIActivity.this, PatientInfoManage.class);startActivity(intent);}});final Button nextbutton = (Button) findViewById(R.id.nextbutton);nextbutton.setOnClickListener(new OnClickListener() {@Overridepublic 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{@Overridepublic 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) + ',');elsebfw.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) + ',');elsebfw.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 blocke.printStackTrace();} finally {c.close();}}}
上面有很多代码都是以前保存选项信息的代码,主要是最后一个方法实现格式的转化。
要在AndroidManifest.xml加上一句对文件的允许对sd卡可写
最后得到的文件名为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;@Overridepublic 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(); }}
}最后打印出来的数据为
:
这样数据就完整的转换过来了。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
