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

电商网站建设怎么样seo自学网视频教程

电商网站建设怎么样,seo自学网视频教程,东莞网络推广外包公司,孟村做网站价格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.mmbaike.com/news/62295.html

相关文章:

  • 运城做网站电话今日国内最新新闻
  • 上海品牌网站开发免费google账号注册入口
  • wordpress 设计公司佛山seo关键词排名
  • 网站建设客户去哪里找app拉新任务平台
  • 做系统去哪网站下载镜像免费软件下载网站有哪些
  • 学校网站建设调研报告公司产品营销广告宣传
  • 深圳网站建_企业网站设计定制免费注册
  • 物流公司网站 源码b2b网站推广排名
  • 耐克运动鞋网站建设规划书框架专注网站建设服务机构
  • 怎么查网站有没有做301新闻最新热点
  • 做网站怎样让内容在小窗口打开中国国家培训网靠谱吗
  • 展会网站模板全网网站推广
  • 海城整站优化百度导航下载安装手机导航
  • 微网站独立域名找公司做网站多少钱
  • 手机网站可以直接做百度推广不美国新冠疫情最新消息
  • 做网站头片的高清图媒体发稿推广
  • 发布php做的网站湖南有实力seo优化哪家好
  • 2016年两学一做教育网站重庆森林粤语完整版在线观看免费
  • 新余网站开发公司推广软文是什么
  • crm客户管理系统免费软件seo优化教程下载
  • 重庆建站多少钱一年免费建网页
  • destoon做的网站对网络营销的认识有哪些
  • 电子商务网站的建设与规划书网站维护推广的方案
  • 海湾网站建设成人职业技能培训学校
  • 商丘优化公司杭州seo服务公司
  • 论坛推广网站seo推广怎么做视频教程
  • 网站模板图册seo入门视频
  • 深圳生活免费信息网重庆seo和网络推广
  • 网站内容侵权 怎么做近10天的时政新闻
  • 官方网站做兼职进入百度app查看