当前位置: 首页 > news >正文

河间网站建下载互联网

河间网站建,下载互联网,seo关键词排名优化的方法,网站开发培训达内实战研究一下 EasyExcel 如何从指定文件位置进行读取数据 EasyExcel的使用背景EasyExcel的时候痛点EasyExcel对比其他框架 EasyExcel的编程模式EasyExcel读取的指定位置导入数据的流程表头校验invokeHeadMap()方法 数据处理invoke()方法 执行中断hasNextdoAfterAllAnalysed()方… 实战研究一下 EasyExcel 如何从指定文件位置进行读取数据 EasyExcel的使用背景EasyExcel的时候痛点EasyExcel对比其他框架 EasyExcel的编程模式EasyExcel读取的指定位置导入数据的流程表头校验invokeHeadMap()方法 数据处理invoke()方法 执行中断hasNextdoAfterAllAnalysed()方法 数据完成doAfterAllAnalysed()方法 总结一下 EasyExcel的使用背景 工作中总会遇到对Excel读写功能之前接触过EasyExcel后续我们基本上用它代替了传统的POI和JXL、甚至还有一个EasyPOI技术。 EasyExcel的时候痛点 使用的EasyExcel时候一般场景下表头比较传统也不复杂但是这次呢表头稍微有点复杂读取数据要从指定的位置开始要从指定位置开始读取EasyExcel所以呢在不断的摸索之后找到了合适的解决方法。 EasyExcel对比其他框架 平常用poi读取excel数据量少加上EasyExcel读取Excel有点复杂所以一直也没在项目中使用EasyExcel直到有一回要读取的数据量太大使用poi读取Excel在创建Workbook - WorkbookFactory.create(inputStream) 时就异常了分配很多内存也不好使所以放弃使用poi转使用EasyExcel。 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题但POI还是有一些缺陷比如07版Excel解压缩以及解压后存储都是在内存中完成的内存消耗依然很大。easyexcel重写了poi对07版Excel的解析能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M并且再大的excel不会出现内存溢出03版依赖POI的sax模式。 在上层做了模型转换的封装让使用者更加简单方便 --EasyExcel 使用EasyExcel读取Excel时一直在想如何简化读取方式不用读取每个Excel都创建一个XXDataListene监听器类刚开始想把DataListener加上泛型共用一个DataListener,但是还涉及到如何传递Dao和每个Dao如何保存数据而且保存数据前可能还需要对数据进行不同的处理。 EasyExcel的编程模式 EasyExcel开源挺久了但使用上感觉有点让人望而生怯刚开始看官方文档上读取Excel挺简单的只需要一行代码继续细看的话还需要创建一个回调监听器有点复杂呀每个Excel都需要创建一个单独的回调监听器类。 EasyExcel读取的指定位置 要开始读取数据第8行才是真正的数据直接上代码headRowNumber()不写默认是1即就是从第二行开始读数据。 /*** 读取文件信息数据* param filePath* param headNum*/public ContactInfoExcelDataListener read(String filePath , int headNum){EasyExcel.read(filePath, this).head(ContactInfoExcelEntity.class).autoCloseStream(true).autoTrim(true).ignoreEmptyRow(true).sheet()// 这里可以设置1因为头就是一行。如果多行头可以设置其他值。不传入也可以因为默认会根据DemoData 来解析他没有指定头也就是默认1行.headRowNumber(Math.max(headNum,NumberUtils.BYTE_ZERO)).doRead();return this;}/*** 读取文件信息数据* param filePath*/public ContactInfoExcelDataListener read(String filePath){EasyExcel.read(filePath, this).head(ContactInfoExcelEntity.class).autoCloseStream(true).autoTrim(true).ignoreEmptyRow(true).sheet()// 这里可以设置1因为头就是一行。如果多行头可以设置其他值。不传入也可以因为默认会根据DemoData 来解析他没有指定头也就是默认1行.doRead();return this;}/*** 读取文件信息数据* param inputStream* param headNum*/public ContactInfoExcelDataListener read(InputStream inputStream, int headNum){EasyExcel.read(inputStream, this).head(ContactInfoExcelEntity.class).autoCloseStream(true).autoTrim(true).ignoreEmptyRow(true).sheet()// 这里可以设置1因为头就是一行。如果多行头可以设置其他值。不传入也可以因为默认会根据DemoData 来解析他没有指定头也就是默认1行.headRowNumber(Math.max(headNum,NumberUtils.BYTE_ZERO)).doRead();return this;}导入数据的流程 基本都会走到这里全部放权交接给invoke方法并且巧用作为我们锁初始化操作的控制赋值切记如果headNum 0 此方法很有可能不会触发慎用 表头校验 目前只是实现了相关的单节点同步锁如果未来扩展了相关的分布式节点需要采用分布式锁机制进行控制锁范围需要进行控制 invokeHeadMap()方法 /*** 调用头部* param map* param analysisContext*/Overridepublic void invokeHead(MapInteger, CellData map, AnalysisContext analysisContext) {log.info(【start read the excel head data】:{},map);// 判断标记头是否存在try {int titleRows map.size();// 头部的中断处理机制failureDataCount preValidate?orginalHead.size() ! titleRows?NumberUtils.INTEGER_ONE:NumberUtils.BYTE_ZERO:NumberUtils.BYTE_ZERO;// 进行置位if(preValidate (failureDataCount.intValue() NumberUtils.INTEGER_ONE)){causeByHeadFormatAbort Boolean.TRUE;}if(!isMockFlag) {// TODO 基本不会走到这里一般我们如果需要可以使用此方法作为初始化资源使用的目的//Preconditions.checkNotNull(clueLogic,not support clueLogic is inject this class subject!);if (Objects.isNull(clueLogic)) {clueLogic SpringUtils.getBean(ClueLogic.class);}customerImportVO new CustomerImportVO();// 此部分主要是为了减少不必要的内存空间的申请tempDataList Lists.newArrayListWithExpectedSize(batchSizeUnit);} // syncLockController.lock();} catch (Exception e) {log.error(invoke the analysis the title head info data is failure!,e);throw new UnsupportedOperationException(invoke the analysis the title head info data is failure!,e);}log.info(【finished read the excel head data】);}数据处理 invoke()方法 一条一条数据解析 invoke()方法 方法里面是我业务逻辑数据校验。invoke 就是每行具体的数据值 /*** 调用操作处理控制机制* param excelEntity* param context*/Overridepublic void invoke(ContactInfoExcelEntity excelEntity, AnalysisContext context) {log.info(----【start read the excel main data:{}】----,excelEntity);if(batchSizeUnit tempDataList.size()){CustomerImportVO customerImportVO clueLogic.startCallTaskProxy(contactInfoImportParam,tempDataList);// 合并计算结果-更新为最新的结果this.customerImportVO.merge(customerImportVO);tempDataList.clear();tempDataList Lists.newArrayListWithExpectedSize(batchSizeUnit);}else{tempDataList.add(excelEntity);}log.info(【finished read the excel main data】);}执行中断 hasNextdoAfterAllAnalysed()方法 /*** 是否拥有下一次执行* [param](https://my.oschina.net/u/2303379) context* [return](https://my.oschina.net/u/556800)*/[Override](https://my.oschina.net/u/1162528)public boolean hasNext(AnalysisContext context) {return causeByHeadFormatAbort?Boolean.FALSE:isSupportAbort? failureDataCount 0 :Boolean.TRUE;}数据完成 doAfterAllAnalysed()方法 所有数据解析完 doAfterAllAnalysed()方法里面写的有保存数据方法。 /*** 执行结束的回调机制* param analysisContext*/Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {log.info(【doAfterAllAnalysed the process】);try {CustomerImportVO customerImportVO clueLogic.startCallTaskProxy(contactInfoImportParam,tempDataList);this.customerImportVO.merge(customerImportVO);finisheDataResult Boolean.TRUE;}catch (Exception e){log.error(execute finially the flush data is failure);//TODO 收尾的数据信息如何做到一致性和完成补偿finisheDataResult Boolean.FALSE;} finally {tempDataList.clear(); // syncLockController.unlock();}}总结一下 快速读写EasyExcel 支持 Excel 2003 和 Excel 2007 格式并提供高效的读写性能。它使用了 NIO新输入/输出技术使得读写操作更加快速。简单易用EasyExcel 的 API 设计简洁明了易于使用。开发者只需编写少量代码即可完成 Excel 文件的读写操作。它还支持链式编程使代码更加简洁。支持自定义EasyExcel 提供了丰富的自定义选项允许开发者根据需要调整 Excel 文件的格式、样式等。它还支持自定义公式、条件格式等功能满足各种业务需求。灵活的配置EasyExcel 支持多种配置方式如属性配置、注解配置等。开发者可以根据项目需求选择合适的配置方式使得 Excel 文件的处理更加灵活。
http://www.hkea.cn/news/14538206/

相关文章:

  • 企业网站托管方式最传统的网站推广手段
  • 网站建设合同浩森宇特公众号注册入口官网
  • 个人网站备案名称填写企业为什么做平台网站
  • 没有固定ip做网站网站优化建设哈尔滨
  • 网站建设与管理实践心得番禺网站建设wwiw
  • 企业网站如何做推广搜索引擎推广的特点
  • 营销型网站制作培训多少钱建设企业网站方法
  • 雅安做网站的公司笔记本网站开发背景
  • ui设计灵感网站怎样建公司网站
  • 定制建站公司jsp网站入门
  • asp企业网站网站开发工程师需要什么证书
  • 青岛网站建设华夏郑州公司网站建设哪家好
  • 深圳市建设局科技处网站太原网站维护
  • 网站登录页面做汽车团购网站有哪些
  • 永康建设网站潍坊网站空间
  • 网站建设注意哪些问题上海建设手机网站
  • 河南省和城乡建设厅网站首页做冠县梨园网站怎么做
  • 佛山专业网站建设公司做英文网站挂谷歌广告
  • 旅游网站开发实验报告wordpress 路径标签
  • 光速网络网站大型电子商务网站建设
  • 用vs做网页是怎么创建网站的国外精产品1688
  • 网站建设综合报告外包项目
  • wordpress 3.8.3 下载seo优化厂商
  • 宁波做公司网站的公司山西疾控最新通告今天
  • 系网站建设总结报告济南网站的建设
  • 怎么样自己创建网站设置网站默认编码
  • 网站首页策划怎么做顺德网站制作案例价位
  • 网站开发师培训要加强分院网站建设
  • 十大网站建设菠菜网站模板
  • 临海大经建设集团网站多层次网络营销合法吗