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

电商网站建设怎么样智能营销系统

电商网站建设怎么样,智能营销系统,什么是网站关键词,wordpress页面注册忘记密码1、问题 工作中遇到一个需求&#xff0c;接收一个zip包&#xff0c;读取其中的excel文件并处理&#xff0c;减少用户多次选择目录和文件的痛点&#xff0c;该zip包包含多级目录 2、依赖 需要用到apache的Workbook类来操作Excel&#xff0c;引入以下依赖 <dependency>&l…

1、问题

 工作中遇到一个需求,接收一个zip包,读取其中的excel文件并处理,减少用户多次选择目录和文件的痛点,该zip包包含多级目录

2、依赖

 需要用到apache的Workbook类来操作Excel,引入以下依赖

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version>
</dependency>

3、具体实现

public List<Workbook> getExcelsFromZip(MultipartFile multipartFile) {ZipInputStream zis = null;List<Workbook> workbooks = new ArrayList<>();try {// 构建zip流zis = new ZipInputStream(multipartFile.getInputStream());// 获取文件条目,此方法读取的问zip包中所有条目(目录和文件),多级目录下的所有文件和目录均会被读取ZipEntry zipEntry = zis.getNextEntry();while (zipEntry != null) {// 判断类型是否为文件if (!zipEntry.isDirectory()) {// 获取文件名String fileName = zipEntry.getName();/* 后缀名 */int suffixIndex = fileName.lastIndexOf(".");String suffix = suffixIndex >= 0 ? fileName.substring(suffixIndex) : "";// 判断是否为excel文件if (".xls".equals(suffix) || ".xlsx".equals(suffix)) {/* 读取文件 */ByteArrayOutputStream out = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;// 在调用了getNextEntry()后,zis就指向了获取到的ZipEntry,读取zis流实际就是读取当前ZipEntry,不会读取到其他条目while ((len = zis.read(buffer)) > 0) {out.write(buffer, 0, len);}ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());/* 构建Workbook */Workbook wb;if (".xls".equals(suffix)) {// 老版excel格式,使用HSSFWorkbookwb = new HSSFWorkbook(in);}else {// 新版excel格式,使用XSSFWorkbookwb = new XSSFWorkbook(in);}workbooks.add(wb);// 关闭当前ZipEntry,确保不会重复处理zis.closeEntry();// 获取下一条目zipEntry = zis.getNextEntry();}}}} catch (IOException e) {throw new RuntimeException(e);}finally {if (zis != null) {try {zis.close();} catch (IOException e) {throw new RuntimeException(e);}}}return workbooks;}

3、技术要点

(1)ZipInputStream.getNextEntry()方法

 【1】该方法可获取到zip包内的各级目录及各级目录下的文件,并不需要进行递归处理。
 【2】ZipInputStream实例调用该方法后,将会指向获取到的条目,这时使用ZipInputStream实例操作的就是获取到的ZipEntry对象。可通过ZipInputStream.closeEntry()和ZipInputStream.getNextEntry()迭代到下一个ZipEntry条目。

(2)为什么选择ByteArrayInputStream和ByteArrayInputStream获取Workbook

 二者是在内存中处理字节的IO流,不同于磁盘IO流会在磁盘中创建临时文件读写,处理速度会更快,在内存中处理数据也符合业务需求。

(3)为什么不使用Workbook wb = WorkbookFactory.create(zis);直接转化

  实测使用WorkbookFactory.create(zis)会关闭流,导致无法读取后续条目

http://www.zhongyajixie.com/news/60476.html

相关文章:

  • 做网站的流程知乎seo运营是做什么的
  • 个人网站可以做企业宣传免费网络推广网址
  • 山西网站制作公司哪家好网页搜索引擎
  • 任县网站建设设计seo指搜索引擎
  • 需要做网站建设和推广路由器优化大师
  • 列举免费域名注册的网站nba最新交易汇总
  • 天津市建设局网站太原竞价托管公司推荐
  • wp如何做网站地图广东东莞今日最新消息
  • 怎么做国外网站网站功能
  • 做网站色弱可以吗免费网站分析seo报告是坑吗
  • 想学做网站 应该学赣州seo推广
  • wordpress钉钉登陆seo系统源码
  • 湛江市建网站有没有帮忙推广的平台
  • 河南商务学校网站建设seo提高关键词
  • wordpress 自动生成标签网站排名优化教程
  • 武汉电商网站建设合肥全网推广
  • 网站制作过程中碰到的问题网站流量统计分析
  • 无网站做cpa申请网站怎样申请
  • 公司建网站多少钱百度号码认证平台官网
  • 宝塔做网站443链接重庆网络seo公司
  • 网站建设与管理大纲天津seo排名公司
  • 南京市雨花台区建设局网站种子资源
  • qq网站官网2022拉新推广平台
  • 怎么做国际网站苏州seo培训
  • 怎样申请建立自助网站代理广告投放平台
  • 网站建设 碧辉腾乐建站小程序
  • 开发区网站建设色盲
  • 找个可以直接看的网站济南百度
  • 设计类专业包括哪些北京网站seo哪家公司好
  • 做网站如何月入10万自媒体平台哪个收益高