Export.arr通过txt,csv,xls导入文件,导出文件

开发场景

1.用户需要导入文件(导入的文件有多种格式:xls,txt,csv)到手机中,存到sqlite数据库中,然后通过手机操作查询,修改数据等操作后,用户需要将数据导出,生成新的文件(导出文件有多种格式:xls,txt,csv).

2.每个客户要导入时的条件可能都是不一样的,导出时的要求也是不一样的。
例如:
导入文件格式不同(xls,txt,csv)
导入文件是不是有包含标题行
如果导入文件是txt格式,那么每一列数据是通过是什么符号来区分开(即分隔符)
标题名可能是不一样的
导入导出的字段排列顺序(按排序序号将数据写入对应的数据库表字段)
导入导出时忽略某列数据(即某列数据不导入)
导入或导出时的文件名称不一样,文件的存放位置要求也不一样。
再次导入时是否覆盖原有的数据,导出时是否删除数据。

实现

根据以上需求,写了export这个module,也编译生成了export.arr文件(实现了以前所提及的)。可以通过界面设置来决定如何导入导出文件。
因为涉及到界面,或许会因为你自己的工程一些资源id相同或者主题Theme不同而产生问题,不过没关系,不要太懒,直接在我提供的源代码中修改,重新编译生产新的arr就好。
希望能给需要的人提供一些思路。

主要实现技术:java 反射等

使用

1.項目引入export.arr这个包

将export.arr复制到libs文件夹下
修改bulid.gradle(app)文件:
compile(name: 'export', ext: 'aar')

2.新增两个类:FileFormat.java,FileFormatDao.java(见附件示例代码(use_example文件下))

FileFormat.java(文件格式类)基本不用作修改,直接使用。
FileFormatDao.java(文件格式操作类)主要实现以下两个方 法(具体实现可参考附件示例代码):

public List<FileFormat> addExportData()

public List<FileFormat> addImportData()

3.在应用第一次进入时(在Application中),应进行导入导出设置数据的初始化

//判断是否是第一次进入
if (getSpUtil().getBoolean(Constants.FISRT_ENTER, true)) {
    //初始化导出设置
    List<FileFormat> list = daoSession.getFileFormatDao().addExportData();
    //初始化导入设置
    list.addAll(daoSession.getFileFormatDao().addImportData());
    daoSession.getFileFormatDao().deleteAll();
    daoSession.getFileFormatDao().insertInTx(list);
    getSpUtil().addBoolean(Constants.FISRT_ENTER, false);
}

4.新建一个Activity,用于显示文件格式设置界面:

具体代码可参考示例代码中的FileFormatActivity.java
注意:FileFormatActivity必须继承FormatActivity

5.导入设置,选择文件类型:

图片.png

代码示例:
在res/vaules/arrays.xml文件中:

<string-array name="file_type_in">
<item>操作员</item>
<item>部门表</item>
<item>员工表</item>
<item>位置表</item>
<item>固定资产表</item>
</string-array>

<string-array name="file_type_value_in">
<item>USER</item>
<item>DEPARTMENT</item>
<item>EMPLOYEE</item>
<item>LOCATION</item>
<item>ASSET</item>
</string-array>

注意:以上的USER、DEPARTMENT等对应的是表名(决定要将数据导入哪个表)

6.导出设置,选择文件类型

图片.png

代码示例:

<string-array name="file_type_out">
<item>导出数据</item>
</string-array>

<string-array name="file_type_value_out">
<item>EXPORT</item>
</string-array>

7.界面颜色设置

图片.png
1.区域的颜色设置:
<color name="top_bar_color">#dd5862</color>

2.区域的颜色设置:
<color name="indicator_color">#39A1E8</color>

3.图标的替换:
在/res/mipmap/中放置图标,命名为export_right_tw.png
建议大小40*40.

8.导入导出方法使用

导入:

/**
 * 导入文件
 * @param dbname    数据库名称
/**
 * 导入文件
 * @param dbname    数据库名称
 * @param version  数据库版本
 * @param tableName 文件格式设置表
 * @param fileTypeName 文件类型名称(表名+In)
 * @param fileType 文件类型编码(表名)
 * @param filepath 文件完整路徑
 * @param filename     文件名称
 * @param delete       是否删除(覆盖)之前数据
 * @param mHandler     Handler
 * @return 是否成功
 */


public void ImportFile(Context context, String dbname, int version, String tableName, 
                      String fileTypeName, String fileType,String filepath,
                      boolean delete,String filename, Handler mHandler)

formartUtil.ImportFile(getActivity(), "fa.db", DaoMaster.SCHEMA_VERSION,         
                     FileFormatDao.TABLENAME, UserIn,USER,
                    ”storage/sdcard0//固定资产/操作员”, fileName,true, mHandler);

导出:

/**
 *
 * @param context 上下文
 * @param dbname    数据库名称
 * @param version   数据库版本
 * @param tableName 文件格式设置表
 * @param fileType  导入或导出
 * @param path  导出路径
 * @param list1 导出的数据
 * @param <E>
 * @return
 * @throws java.io.IOException
 */
OutputFile(Context context,String dbname,int version,
            String tableName ,String fileType,String path,List<E> list1)

exportHelper.OutputFile(getActivity(), "fa.db", DaoMaster.SCHEMA_VERSION,
               FileFormatDao.TABLENAME, "EXPORT", finalPath, exportList)

9.上面提及的文件及源代码:
地址:https://github.com/huangyula/export.git

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • 我经常在想,女人的事业到底是什么?是拼命打拼的事业,还是一个家庭?或者还是其他的呢? 我也是一个特...
    刘娇阅读 688评论 3 24
  • 诸葛送东风,周瑜在各大要道布置兵马,拦截曹操援兵和退路。黄盖火攻曹操。
    亚瑟王666阅读 336评论 0 0
  • 今天分享的书叫做《好奇心》,作者来自是英国的伊恩▪莱斯利。 分享书中的三个主要内容为一台发动机、两种好奇心和三个训...
    娜娜_51cf阅读 359评论 1 4
  • 我是一名普通的学生妹,以前的我总是很能异想天开的认为做微商很容易做,就是发发圈人家就会来注意你,你就会得到收获,可...
    任意123阅读 186评论 0 1