有了这个开源工具后,我五点就下班了

前言  「一个优秀的开发者,一定是会利用各种工具来提升自己的开发效率 。」 前段时间,博主在Gitee/Github开源了一个提升开发效率的工具,工具内集成了各种常用工具如csv、Excel、ftp、文件系统等等,「只需要简单调用API,就可以得到想要的结果,可以极大帮助开发者提升效率」,下面来一起看看这款工具如何使用吧 。

有了这个开源工具后,我五点就下班了

文章插图
 
工具介绍  报表的导出、导入功能、文件上传、下载等在平常业务中是最常见不过的功能了,「许多小伙伴在开发的时候才会去网上找之前别人编写过的案例参考,但是许多博客记载的都是时间比较长远或者不完整的代码,这导致在引入的时候还要处理引入的许多未知问题 。」
【有了这个开源工具后,我五点就下班了】  现在博主开源的“轮子之王”包含了这些常见的功能,「源码全开发,每种功能都有相应的例子说明,项目会持续更新迭代,有问题还可以及时给项目提issue,相信比大多数网上的博客代码可靠性更高 。」
  「项目地址如下:」
  Github:https://github.com/it-learning-diary/it-wheels-king
  Gitee:https://gitee.com/it-learning-diary/it-wheels-king
  「项目结构如下:」
有了这个开源工具后,我五点就下班了

文章插图
 
一、excel工具  该工具实现采用的是开源的easyexcel框架 。easyexcel是阿里的开发人员对poi框架进行了优化,解决了poi在大数据量时可能出现OOM异常,并且兼容xls和xlsx两种文件类型的一个开源框架 。
  「excel工具集成功能如下:」
  • excel的导入(可以自定义转换后的excel数据处理的业务逻辑,支持抛出异常、事务回滚、记录解析时的异常数据)
  • 导出(支持固定表头,兼容多sheet页和动态表头,兼容多sheet页)功能 。
  「excel工具的特点如下:」
  使用过easyexcel框架的一些读者知道,每个导入功能都要写一个对应的Listener进行数据转换,在很多时间其实转换的逻辑都是类似的,不同的只不过是转换后数据处理的业务逻辑不一样 。
  「本开源项目的excel工具则利用JAVA中的泛型和Java8中的Consumer接口将相同的部分(转换逻辑)抽取出来,不同的部分则单独传入(数据处理的业务逻辑),这样就避免了每个导入都需要创建一个相类似的Listerner,减少了类的创建和提高了开发效率 。」
  「部分源码如下:」
/*** 通用导入excel文件方法** @param fileStream 导入的文件流* @param rowDto 接收excel每行数据的实体* @param rowAction 将接收到的实体进行自定义的业务处理逻辑方法* @param <T> 实体类型*/public static <T> void importFile(InputStream fileStream, T rowDto, ThrowingConsumer<List<T>> rowAction) {// 获取excel通用监听器ExcelImportCommonListener<T> commonListener = new ExcelImportCommonListener<>(rowAction);// 读取excel文件并导入EasyExcel.read(fileStream, rowDto.getClass(), commonListener).sheet().doRead();}/*** excel文件导出(可以包含多个sheet页),固定表头(通过实体指定属性的方式)* @param response* @param fileName导出文件名* @param head导出表头(多个sheet页就是多个集合元素)* @param exportData 需要导出数据* @param sheetNames sheet页的名称,为空则默认以:sheet + 数字规则命名*/public static <T> void exportFile(String fileName, List<T> head, List<List<T>> exportData, List<String> sheetNames, HttpServletResponse response) {if (Objects.isNull(response) || StrUtil.isBlank(fileName) || CollUtil.isEmpty(head)) {log.info("ExcelExportUtil exportFile required param can't be empty");return;}ExcelWriter writer = null;try {response.setContentType(ExportConstant.EXCEL_CONTENT_TYPE);response.setCharacterEncoding(ExportConstant.UTF_8);response.setHeader(ExportConstant.CONTENT_DISPOSITION, ExportConstant.ATTACHMENT_FILENAME + fileName + ExportConstant.XLSX_SUFFIX);// 设置导出的表格样式HorizontalCellStyleStrategy horizontalCellStyleStrategy = getExportDefaultStyle();writer = EasyExcel.write(response.getOutputStream()).registerWriteHandler(horizontalCellStyleStrategy).build();for (int itemIndex = 0; itemIndex < exportData.size(); itemIndex++) {// 表头数据Object headData = https://www.isolves.com/it/cxkf/ky/else/2022-08-09/head.get(itemIndex);// sheet页的数据List


推荐阅读