分词统计(三)导入导出数据
来源:互联网 发布:acrobat x for mac 编辑:程序博客网 时间:2024/06/04 18:06
为了方便查看,添加了导出导入数据的功能,默认导出格式为".csv",位置位于SDCard的"DownLoad"目录下。
效果图:
文件操作代码
package com.mwf.analyze.utils;import android.content.Context;import android.os.Environment;import android.text.TextUtils;import com.mwf.analyze.bean.AnalyzeBean;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;/** * 文件管理工具 */public class FileUtils { /** * 读取txt文件的内容 */ public static String readTxtFile(String filePath) { try { String encoding = "GBK";// String encoding="UTF-8"; File file = new File(filePath); if (file.isFile() && file.exists()) { //判断文件是否存在 InputStreamReader read = new InputStreamReader( new FileInputStream(file), encoding);//考虑到编码格式 BufferedReader bufferedReader = new BufferedReader(read); String lineTxt = null; String result = ""; while ((lineTxt = bufferedReader.readLine()) != null) { if (!TextUtils.isEmpty(lineTxt)) { System.out.println(lineTxt); result += lineTxt; } } read.close(); return result; } else { System.out.println("找不到指定的文件"); return null; } } catch (Exception e) { System.out.println("读取文件内容出错"); e.printStackTrace(); return null; } } /** * 导出csv文件 */ public static boolean saveTxt(String content, Context context, String path, String fileFullName) { //sd卡检测 String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {// Toast.makeText(context, "SD 卡不可用", Toast.LENGTH_SHORT).show(); return false; } //检测文件夹是否存在 File file = new File(path); file.exists(); file.mkdirs(); String p = path + File.separator + fileFullName; FileOutputStream outputStream = null; try { //创建文件,并写入内容 outputStream = new FileOutputStream(new File(p)); String msg = new String(content); outputStream.write(msg.getBytes("GBK")); } catch (FileNotFoundException e) { e.printStackTrace(); return false; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (outputStream != null) { try { outputStream.flush(); } catch (IOException e) { e.printStackTrace(); } try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); }// Toast.makeText(context, "导出成功", Toast.LENGTH_SHORT).show(); } } return true; } /** * 导入csv文件 */ public static List<AnalyzeBean> readCSV(String csvPath) { File csvFile = new File(csvPath); List<AnalyzeBean> mList = new ArrayList<AnalyzeBean>(); AnalyzeBean newBean; try { BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csvFile), "GBK")); String line = ""; while ((line = br.readLine()) != null) { // 把一行数据分割成多个字段 StringTokenizer st = new StringTokenizer(line, "|"); while (st.hasMoreTokens()) { String str = st.nextToken(); String[] result = str.split(","); newBean = new AnalyzeBean(); newBean.setAmount(Integer.valueOf(result[0])); newBean.setName(result[1]); mList.add(newBean);// System.out.println("tokens_____" + str); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return mList; }}
导出功能代码,先读取数据库数据,然后开启一个子线程
/** * 导出完成更新UI */ private final Handler exportFnishHandler = new Handler() { @Override public void handleMessage(Message msg) { dismissProgress(); Toast.makeText(AnalyzePoemActivity.this, "导出成功", Toast.LENGTH_SHORT).show(); } };
/** * 导出数据 */ private void export() { //查询所有数据 AnalyzeDao dao = new AnalyzeDao(AnalyzePoemActivity.this); final List<AnalyzeBean> list = dao.queryAll(); if (list == null || list.size() == 0) { Toast.makeText(this, "查询不到数据", Toast.LENGTH_LONG).show(); return; } //显示一个输入导出的文件名的对话框 LayoutInflater inflater = LayoutInflater.from(this); View view = inflater.inflate(R.layout.dialog_export, null); final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); alertDialog.setCancelable(true); alertDialog.show(); alertDialog.setContentView(view); alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); alertDialog.getWindow().clearFlags( WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); final EditText editText = (EditText) view.findViewById(R.id.editText); Button btn_cancel = (Button) view.findViewById(R.id.btn_cancel); btn_cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { alertDialog.dismiss(); } }); Button btn_commit = (Button) view.findViewById(R.id.btn_commit); btn_commit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { alertDialog.dismiss(); showProgress("正在导出,请稍后......"); String name = editText.getText().toString(); Log.e(TAG, "name=" + name); if (TextUtils.isEmpty(name)) { name = editText.getHint().toString(); name = name.substring(5, name.length()); } final String finalName = name; //获取SDCard路径 final File file = Environment.getExternalStorageDirectory(); new Thread(new Runnable() { @Override public void run() { String text = ""; for (int i = 0; i < list.size(); i++) { text += (list.get(i).getAmount() + "," + list.get(i).getName() + "\n"); } //保存文件 FileUtils.saveTxt(text, AnalyzePoemActivity.this, file.getAbsolutePath() + File.separator + "Download", finalName + ".csv"); exportFinishHandler.sendEmptyMessage(0); } }).start(); } }); }
导出数据库查询代码
/** * 查询所有数据 */ public List<AnalyzeBean> queryAll() { List<AnalyzeBean> list = null; try { //根据数量降序查询 list = daoOpe.queryBuilder().orderBy("amount", false).query(); } catch (SQLException e) { e.printStackTrace(); } return list; }
对话框布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:gravity="center_horizontal" android:text="请输入文件名称" android:textColor="#000000" android:textSize="12dp"/> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:editable="true" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:hint="默认名字:我的统计表数据" android:textSize="15dp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/btn_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginLeft="15dp" android:layout_marginRight="30dp" android:text="取消"/> <Button android:id="@+id/btn_commit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginLeft="15dp" android:layout_marginRight="30dp" android:text="确认"/> </LinearLayout></LinearLayout>
导入代码
/** * 导入数据完成UI更新 */ private final Handler inportFinishUIHandler = new Handler() { @Override public void handleMessage(Message msg) { dismissProgress(); Toast.makeText(AnalyzePoemActivity.this, "导入成功", Toast.LENGTH_SHORT).show(); //展示数据 showData(); } }; /** * 导入数据 */ private void inport() { DialogSelectionListener listener = new DialogSelectionListener() { @Override public void onSelectedFilePaths(final String[] files) { if (files != null && files.length >= 0) { showProgress("正在导入,请稍后......"); new Thread(new Runnable() { @Override public void run() { //读取文件 List<AnalyzeBean> list = FileUtils.readCSV(files[0]); AnalyzeDao dao = new AnalyzeDao(AnalyzePoemActivity.this); //逐个检查合并数据 for (int i = 0; i < list.size(); i++) { dao.merge(list.get(i)); } Log.e(TAG, "导入完毕"); inportFinishUIHandler.sendEmptyMessage(0); } }).start(); } } }; openFile(listener); }
数据库操作
/** * 检查是否已经存在 * 有则数量想加 * 没有则新增一个 */ public void merge(AnalyzeBean mBean) { AnalyzeBean sqlBean = null; try { sqlBean = daoOpe.queryBuilder().orderBy("id", false).where().eq("name", mBean.getName()).queryForFirst(); if (sqlBean == null) { //新建一个 daoOpe.create(mBean); } else { //数量相加 sqlBean.setAmount((sqlBean.getAmount() + mBean.getAmount())); daoOpe.update(sqlBean); } } catch (SQLException e) { e.printStackTrace(); } }
清空数据代码
/** * 清空数据结束更新UI */ private final Handler clearFinishUIHandler = new Handler() { @Override public void handleMessage(Message msg) { dismissProgress(); } }; /** * 清空数据 */ private void clear() { showProgress("正在清空,请稍后......"); new Thread(new Runnable() { @Override public void run() { //清空数据库 new AnalyzeDao(AnalyzePoemActivity.this).deletedAll(); Log.e(TAG, "清空完毕"); clearFinishUIHandler.sendEmptyMessage(0); } }).start(); //清空内容 mTxtContent.setText(""); }
清空数据数据库操作,先读取全部,再遍历删除
/** * 删除所有数据 */ public void deletedAll() { try { List<AnalyzeBean> list = queryAll(); Log.e(TAG, "删除总数: " + list.size()); //遍历逐个删除 for (int i = 0; i < list.size(); i++) { daoOpe.delete(list.get(i)); } } catch (SQLException e) { e.printStackTrace(); } }
项目地址:玩转数据统计
0 0
- 分词统计(三)导入导出数据
- Spark 大数据中文分词统计(三) Scala语言实现分词统计
- 数据泵导入导出(三)
- mongodb数据导入导出以及备份恢复(三)
- Falcon(三)——Falcon数据导入和导出
- 导出/导入数据时不会对统计信息产生影响
- Spark 大数据中文分词统计(二) Java语言实现分词统计
- SQL Server三种导入导出数据方式比较
- SQL Server三种导入导出数据方式比较
- SQL Server中数据导入导出三种方法比较
- SQL Server中数据导入导出三种方法比较
- SQL Server中数据导入导出三种方法比较
- SQL Server中导入导出数据三方法比较
- 三大框架ssh中导入导出EXCEL数据
- Hive命令之三:hive的数据导入导出
- Oracle数据导入导出(一)导出数据EXP
- oracle10g数据导入导入导出
- 操作Excel数据(导入导出)
- 01-jQuery概述
- Android Studio NDK HelloWorld 的配置
- Algo-150 6-1 递归求二项式系数的值
- JAVA加解密 -- 对称加密算法与非对称加密算法
- java File 类
- 分词统计(三)导入导出数据
- 131. Palindrome Partitioning
- ROS总结——ROS话题
- Hibernate持久化对象的学习
- 性能优化-shuffle
- 一个python小爬虫
- Sublime Text3 之二十个强大插件(必须收藏)
- JAVA加解密 -- 数字签名算法
- HDU 1539 Shredding Company dfs枚举每位数字的空格