场景一:上传zip包,后台进行解压,提取里面的文件,进行上传。

    public static void inputStreamToFile(InputStream ins, File file) {try {OutputStream os = new FileOutputStream(file);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}os.flush();os.close();ins.close();} catch (Exception e) {e.printStackTrace();}}
    @ResponseBody@RequestMapping(value = "updPlScpjcjd", method = RequestMethod.POST)public ReturnT updPlScpjcjd(KtbgPage page, @RequestParam(value = "file", required = false) MultipartFile file, @AuthenticationPrincipal UserManagerEntity user, HttpServletRequest request, HttpServletResponse response) throws Exception {Map map = new HashMap();ReturnT re = new ReturnT(map);String webSocketUrl = "/updPlScpjcjd-" + page.getP_pycc();File zipFile = null;if (file.equals("") || file.getSize() <= 0) {file = null;} else {InputStream ins = null;try {ins = file.getInputStream();zipFile = new File(file.getOriginalFilename());inputStreamToFile(ins, zipFile);ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK"));int ypxhrs = 0;for (Enumeration enumeration = zip.entries(); enumeration.hasMoreElements(); ) {ZipEntry entry = (ZipEntry) enumeration.nextElement();ypxhrs++;// 创建一个数值格式化对象NumberFormat numberFormat = NumberFormat.getInstance();// 设置精确到小数点后2位numberFormat.setMaximumFractionDigits(2);String result = numberFormat.format((float) ypxhrs / (float) zip.size() * 100);messagingTemplate.convertAndSendToUser(user.getId(), webSocketUrl, result); //用户id,路径,消息if (entry.isDirectory()) {continue;}//文件的String filename = entry.getName();System.out.println(filename);int lastIndex = filename.lastIndexOf(".");System.out.println(lastIndex);String xh = filename.substring(0, lastIndex);System.out.println(xh);//将zipEntry转成输入流InputStream inputStream = zip.getInputStream(entry);//将inputstream转换成mulipartFileMultipartFile multipartFile = new MockMultipartFile(filename, filename, "text/plain", inputStream);//文件名就是学号page.setP_xh(xh);//调用上传接口ktbgService.updPlScpjcjd(request, response, page, multipartFile, map);}} catch (IOException e) {e.printStackTrace();re.setCode(500);} finally {if (ins != null) {ins.close();}}}return re;}

场景二:上传zip,后台进行解压,提取zip包中“文件夹”以及该“文件夹”下的文件后,再进行压缩上传。

    public static void putNextEntry(InputStream inputStream,String name,ZipOutputStream zipOut) throws IOException {//读取相关的文件InputStream input = inputStream;//zipOut.putNextEntry(new ZipEntry(name));// 设置注释//zipOut.setComment("hello");int temp = 0;//读取相关的文件while((temp = input.read()) != -1){//写入输出流中zipOut.write(temp);}//关闭流input.close();}
    public static void inputStreamToFile(InputStream ins, File file) {try {OutputStream os = new FileOutputStream(file);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}os.flush();os.close();ins.close();} catch (Exception e) {e.printStackTrace();}}
    @ResponseBody@RequestMapping(value = "updateScPybByNkd", method = RequestMethod.POST)public ReturnT updateScPybByNkd(LwdbPage page, @RequestParam(value = "file", required = false) MultipartFile file, @AuthenticationPrincipal UserManagerEntity user, HttpServletRequest request, HttpServletResponse response) throws Exception {Map map = new HashMap();ReturnT re = new ReturnT(map);String webSocketUrl = "/updPlScpjcjd-" + page.getP_pycc();File zipFile = null;if (file.equals("") || file.getSize() <= 0) {file = null;} else {InputStream ins = null;try {ins = file.getInputStream();zipFile = new File(file.getOriginalFilename());inputStreamToFile(ins, zipFile);ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK"));int ypxhrs = 0;for (Enumeration enumeration = zip.entries(); enumeration.hasMoreElements(); ) {ZipEntry entry = (ZipEntry) enumeration.nextElement();ypxhrs++;// 创建一个数值格式化对象NumberFormat numberFormat = NumberFormat.getInstance();// 设置精确到小数点后2位numberFormat.setMaximumFractionDigits(2);String result = numberFormat.format((float) ypxhrs / (float) zip.size() * 100);messagingTemplate.convertAndSendToUser(user.getId(), webSocketUrl, result); //用户id,路径,消息if (entry.isDirectory()) {String directoryName = entry.getName();//设置输出流ByteArrayOutputStream out = new ByteArrayOutputStream();ZipOutputStream zipOut = new ZipOutputStream(out);for (Enumeration enumeration2 = zip.entries(); enumeration2.hasMoreElements(); ) {ZipEntry entry2 = (ZipEntry) enumeration2.nextElement();String fileName = entry2.getName();if (!entry2.isDirectory() && fileName.contains(directoryName)) {//將文件添加到包中putNextEntry(zip.getInputStream(entry2),fileName,zipOut);}}zipOut.close();String fileName = directoryName.replaceAll("/","")+".zip";MultipartFile multipartFile = new MockMultipartFile( fileName, fileName, "text/plain", new ByteArrayInputStream(out.toByteArray()));//解析學號int lastIndex = directoryName.lastIndexOf("_");String xh = directoryName.substring(lastIndex+1, directoryName.length());//文件名就是学号page.setP_xh(xh.replaceAll("/",""));//调用上传接口lwdbService.updPyjlcjfjidByXh(request, response,multipartFile, page);continue;}}} catch (IOException e) {e.printStackTrace();re.setCode(500);} finally {if (ins != null) {ins.close();}}}return re;}

Java 导入zip,并进行解压相关推荐

  1. Java实现Zip文件解压

    2019独角兽企业重金招聘Python工程师标准>>> ##1. 两种java实现zip文件解压方式 使用JDK的原生类java.util.zip,上代码: import java. ...

  2. java 使用7z进行解压_java调用7zip解压压缩包的实例

    前言 最近的项目中需要用到解压缩包的功能,客户给出的压缩包的格式主要是rar和zip,因此就打算使用java调用7zip的命令行进行解压文件,本文主要记录一下实现的过程以及其中遇到的问题. 7zip命 ...

  3. Java实现Zip压缩包解压

    对zip压缩包的解压是比较常见的应用场景,java代码的实现也很简单.废话不多说,直接上代码吧 一.代码  /** * zip解压 * @param srcFile        zip源文件 * @ ...

  4. JavaDemo——使用java.util.zip压缩和解压

    Demo: /*** 2019年6月20日下午4:59:37*/ package testzip;import java.io.File; import java.io.FileInputStream ...

  5. java.util.zip.ZipFile解压后被java占用问题。

    在使用jdk自带zip解压工具解压文件时,调用ZipFile的getInputStream(ZipEntry entry)方法获取实体输入流后,正常关闭getInputStram返回的输入流.zip文 ...

  6. Java中zip压缩解压

    1. 解压问题 360压缩文件 使用jdk API 读取压缩文件后解压,报错 java.lang.IllegalArgumentException:MALFORMED 如果是好压压缩文件,使用jdk ...

  7. 在华为云NAIE上跑深度学习_将数据集压缩文件拷贝到本地镜像并进行解压

    #需要用到一下三个模块import moxing as moximport zipfilefrom naie.datasets import get_data_referencefilename = ...

  8. Java实现Zip包解压

    直接上代码: public static void zipDecompress(String sourcePath,String desPath){try {ZipFile zipFile = new ...

  9. java文件压缩与解压_Java实现文件压缩与解压

    Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例.(转载自http://www.puiedu. ...

最新文章

  1. 2014年最热门的国人开发开源软件TOP100
  2. java在主程序修改函数输出,Java通过JNI调用CUDA
  3. 五十二、Java连接Mysql数据库
  4. Nauuo and Circle
  5. usb5-写成usb驱动
  6. APUE第八章学习札记之自建简单解释器以及参数分析
  7. 廖雪峰说python_廖雪峰官网Python部分的疑问及解决
  8. 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
  9. windows下python安装Numpy、Scipy、matplotlib模块
  10. c# int byte转
  11. FPGA状态机跑飞原因分析
  12. CentOS 特殊变量($0、$1、$2、 $?、 $# 、$@、 $*)
  13. 收藏十一种常用简单实用漂亮的HTML表格样式
  14. 重置IE:专治IE疑难杂症的“万精油”(转)
  15. Linux cat命令
  16. Category 分类、类别 总结 - iOS
  17. php打开excel文件,PHP读取Excel文件的简单示例
  18. Comparable和Comparator接口
  19. GNN、GCN、GAT关系
  20. 开发2d游戏要用什么引擎_下一个游戏要使用什么2D游戏引擎

热门文章

  1. 数字华容道算法生有解
  2. 【实战】电脑 开发板 虚拟机三者互ping通教程
  3. 2008年新作——《网管员面试宝典》上市了
  4. usb Plaxis v8.2+SP4 professioner-ISO 1CD(大型岩土工程有限元设计计算软件,完全安装版,好用
  5. springboot+flyway+oracle11g+mysql8 整合包
  6. Python爬虫1:批量获取电影标题和剧照
  7. 使用汉王云API实现手写识别H5(参考:2018政府工作报告关键字)
  8. 解决内嵌字幕的MKV视频剪辑分割时,字幕无法伴随子视频片段的问题
  9. aida64注册信息已损坏_AIDA64 Extreme(硬件检测)
  10. cnn起源_CNN初探