Java关于Excel文件的导入导出

人生如梦 荣华富贵 如木槿之花 朝荣夕逝

在这里插入图片描述


需求

  • 导出: 能够将库表内的数据导出多个Excel表,并且生成一个压缩包,提供用户下载
  • 导入: 能够将一个压缩包内的多个Excel表解压,并获取表内的所有数据

在这里插入图片描述

FileUtils 工具类

public class UnitFileUtils {/*** @Description: 导入文件(返回文件全部数据)*/public static Map<String, List<List<String>>> importCsv(File file) throws IOException {String tableName = file.getName().replace(".csv", "");Map<String, List<List<String>>> result = new HashMap<>();List<List<String>> dataList = new ArrayList<>();BufferedReader br = null;try {br = new BufferedReader(new FileReader(file));String line;while ((line = br.readLine()) != null) {String[] data = line.split(",");List<String> list = new ArrayList<>();for (int i = 0; i < data.length; i++) {list.add(data[i]);}dataList.add(list);}} catch (Exception e) {throw new RuntimeException(e);} finally {br.close();}result.put(tableName, dataList);return result;}/*** @Description: 导出文件*/public static void exportCsv(List<List<String>> listData, String tableName, String path) {path = path + File.separator + tableName + ".csv";try (FileWriter writer = new FileWriter(path)) {for (List<String> list : listData) {StringBuilder rowData = new StringBuilder();for (int i = 0; i < list.size(); i++) {if (i == list.size()) {rowData.append(list.get(i));} else {rowData.append(list.get(i)).append(",");}}writer.write(rowData.toString());writer.write(System.lineSeparator());}} catch (IOException ex) {throw new RuntimeException(ex);}}
}

Impl 实现类

    /*** @Description: 文件导入* multipartFile 文件*/@Overridepublic void importCsv(MultipartFile multipartFile) throws IOException, SQLException {// 获取导入文件数据List<Map<String, List<List<String>>>> fileDataList = transformImportCsv(multipartFile);.../*** @Description: 文件数据解析*/public List<Map<String, List<List<String>>>> transformImportCsv(MultipartFile multipartFile) throws IOException, SQLException {// 获取临时文件夹对象File tempDir = new File(tempPath);// 如果文件夹不存在,则抛出异常if (!tempDir.exists()) {tempDir.mkdirs();}//生成临时文件名称String fileName = UUID.randomUUID().toString().replace("-", "");//通过multipartFile将压缩文件保存到临时路径String temp = FileUtils.saveZipFile(multipartFile, tempPath);//解压zipFileUtils.unzip(temp, tempPath + fileName);//读取解压文件File folder = new File(tempPath + fileName);File[] files = folder.listFiles();List<Map<String, List<List<String>>>> fileList = new ArrayList<>();Map<String, List<List<String>>> fileData = null;for (File file : files) {//遍历zip中的csv文件fileData = UnitFileUtils.importCsv(file);fileList.add(fileData);}//删除临时文件夹以及压缩文件FileUtils.deleteFileOrDir(temp);FileUtils.deleteFileOrDir(tempPath + fileName);return fileList;}/*** @Description: 导出文件*/public void exportCsv(HttpServletResponse response, List<String> tableNames) {String dirName = tempPath + File.separator + UUID.randomUUID().toString().replace("-", "");// 获取临时文件夹对象File tempDir = new File(dirName);// 如果文件夹不存在,则创建if (!tempDir.exists()) {tempDir.mkdirs();}//导出csv文件到指定文件夹for (String tableName : tableNames) {try {List<List<String>> listData = new ArrayList<>();...UnitFileUtils.exportCsv(listData, "unit_sharding_version", path);} catch (Exception e) {throw new RuntimeException("导出表【" + tableName + "】失败!",e);}}//将文件夹压缩为压缩包FileUtils.zip(dirName, dirName + ".zip");//通过流返回FileUtils.doGet(dirName + ".zip", response);//删除临时文件夹以及压缩文件FileUtils.deleteFileOrDir(dirName);FileUtils.deleteFileOrDir(dirName + ".zip");}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/442692.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】链表OJ面试题(题库+解析)

前言 还不清楚链表的码喵们可以看看前篇关于链表的详解 http://t.csdnimg.cn/X6t6P 1.链表面试题 既然已经懂得了链表该如何实现&#xff0c;那么现在就趁热打铁开始练习&#xff01;这里给码喵们整理了相对不错的一些OJ题来练习 1. 删除链表中等于给定值 val 的所有结点。 力…

JAVA和C#怎么开发SECS/GEM:recipe配方处理 S7F1、S7F19

recipe是什么内容呢&#xff1f; recipe是机台加工不同产品时的对应程式&#xff0c;指的是由制造工程师提前在机台上设置&#xff0c;并且EAP控制生产时会自动根据货的类型选择并控制机台按照制造工程师提前设置的方式进行加工。 recipe也称为配方&#xff0c;配方是怎么来的…

【项目管理】立项管理

一、前言 对于甲方的立项&#xff1a;需求调研二编写项目申请书一可行性研究&#xff08;机会、初步、详细&#xff09;一项目论证一项目评估一评审获得批准一发布招标文件&#xff01;对于乙方的立项&#xff1a;看到招标文件一进行项目识别一可行性研究&#xff08;机会、初…

AtCoder Beginner Contest 338F - Negative Traveling Salesman【floyd+状态压缩dp】

原题链接&#xff1a;https://atcoder.jp/contests/abc338/tasks/abc338_f Time Limit: 6 sec / Memory Limit: 1024 MB Score: 500 points、 问题陈述 有一个有N个顶点和M条边的加权简单有向图。顶点的编号为 1 到 N&#xff0c;i/th 边的权重为 Wi​&#xff0c;从顶点 U…

CRF条件随机场学习记录

阅读建议 仔细阅读书[1]对应的序列标注章节&#xff0c;理解该方法面向的问题以及相关背景&#xff0c;然后理解基础的概念。 引言 威胁情报挖掘的相关论文中&#xff0c;均涉及到两部分任务&#xff1a;命名实体识别&#xff08;Named Entity Recognition&#xff0c;NER&a…

ECharts 图表嵌入表格样式的demo

心累。。。 如果条件允许&#xff0c;还是强烈建议 用 Echartshtml 来实现&#xff08;表格部分由 html 来弄&#xff09;。 这里是调研阶段&#xff0c;想看看 ECharts 原生能做到什么程度。 先贴上样图&#xff1a; 贴上完整代码&#xff1a; <!DOCTYPE html> <…

图的学习

图的基本概念和术语 图的定义&#xff1a;图是由顶点的有穷非空集合和顶点之间的边的集合组成的&#xff0c;G表示&#xff0c;V是图G中顶点的集合&#xff0c;E是图G中边的集合 无向图&#xff1a;任意两点的边都是无向边组成的图&#xff08;无向边&#xff1a;&#xff08…

助阵央视春晚直播间,德施曼智能锁携手小红书“大家的春晚”玩转除夕夜

2月9日大年三十当天&#xff0c;智能锁行业领军品牌德施曼&#xff0c;将助阵小红书“央视春晚直播间”&#xff0c;参与“大家的春晚”活动&#xff0c;在直播间陪14亿观众一起看春晚&#xff0c;聊春晚&#xff0c;玩转除夕夜。 每年的央视春晚&#xff0c;都是亿万观众翘首…

前端工程\模块化

前端工程\模块化&#x1f3ed; 本篇文章&#xff0c;学习记录于&#xff1a;尚硅谷&#x1f3a2;&#xff0c;紧接前文&#xff1a;邂逅Node.JS的那一夜→博客 无论是前端、后端、甚至非编程领域都有模块化的概念&#xff0c;只是不同的领域叫法不同&#xff0c;不过&#xf…

Qt程序打包发布方法

步骤一 程序变成Release版本&#xff0c;编译一下 然后会生成后缀为.exe的文件 文件位置在x64/Release/ 下 步骤二 按下电脑的winR&#xff0c;输入cmd 点击确定进入如下界面 输入 cd 你的文件夹地址按下回车 如图所示 输入 windeployqt *.exe(*指的是你的文件名) &…

银行数据仓库体系实践(8)--主数据模型设计

主数据区域中保留了数据仓库的所有基础数据及历史数据&#xff0c;是数据仓库中最重要的数据区域之一&#xff0c;那主数据区域中主要分为近源模型区和整合&#xff08;主题&#xff09;模型区。上一节讲到了模型的设计流程如下图所示。那近源模型层的设计在第2.3和3这两个步骤…

聊聊 Http 服务化改造实践

在微服务架构体系中远程 RPC 调用主要包括 Dubbo 与 Http 调用两个大类&#xff0c;由于 Dubbo 拥有服务注册中心&#xff0c;并且起服务的命名非常规范&#xff0c;使用包名.类名.方法名进行描述。 粉丝福利&#xff0c; 免费领取C/C 开发学习资料包、技术视频/项目代码&#…