分词统计(三)导入导出数据

来源:互联网 发布: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
原创粉丝点击