温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java如何实现解析zip压缩包并获取文件内容

发布时间:2022-07-22 09:57:26 来源:亿速云 阅读:322 作者:iii 栏目:开发技术

本篇内容介绍了“Java如何实现解析zip压缩包并获取文件内容”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

功能描述

页面上传一个源码压缩包,后端将压缩包解压,并获取每个文件中的内容。

相关源码

(1)首先定义一个与解压文件对应的实体类。

package com.sonar.data.vo;   import lombok.Data;   /**  * 文件解析对象  *  * @author Yuanqiang.Zhang  * @since 2022/7/12  */ @Data public class UnzipFileVo {       /**      * 类型:0-文件夹;1-文件      */     private Integer type;       /**      * 文件路径(如:src/main/java/com/zyq/entity/User.java)      */     private String path;       /**      * 文件内容      */     private String content;   }

(2)接下来就是解压的工具类了。

package com.sonar.data.utils.business;   import com.sonar.data.vo.UnzipFileVo; import org.springframework.web.multipart.MultipartFile;   import java.io.*; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile;   /**  * 解析文件工具类  *  * @author Yuanqiang.Zhang  * @since 2022/7/12  */ @SuppressWarnings("unused") public class UnZipUtils {       public static int BYTE_LEN = 10240;       /**      * 本地文件解压      *      * @param file 具体文件      * @return 解压后的文件列表      */     public static List<UnzipFileVo> unzip(File file) {         if (Objects.isNull(file) || !file.exists()) {             return Collections.emptyList();         }         ZipFile zip = null;         try {             zip = new ZipFile(file);         } catch (IOException e) {             e.printStackTrace();         }         if (Objects.isNull(zip)) {             return Collections.emptyList();         }         Enumeration<? extends ZipEntry> entries = zip.entries();         List<UnzipFileVo> vos = new ArrayList<>();         while (entries.hasMoreElements()) {             ZipEntry entry = entries.nextElement();             String path = entry.getName();             UnzipFileVo vo = new UnzipFileVo();             vo.setPath(path);             // 解析文件夹             boolean directory = entry.isDirectory();             if (directory) {                 vo.setType(0);                 vos.add(vo);                 continue;             }             // 解析文件             vo.setType(1);             StringBuilder sb = new StringBuilder();             try (InputStream in = zip.getInputStream(entry);                  InputStreamReader inputStreamReader = new InputStreamReader(in);                  BufferedReader reader = new BufferedReader(inputStreamReader)) {                 String line;                 while ((line = reader.readLine()) != null) {                     sb.append(line).append("\n");                 }             } catch (IOException e) {                 e.printStackTrace();             }             vo.setContent(sb.toString());             vos.add(vo);         }         if (Objects.nonNull(zip)) {             try {                 zip.close();             } catch (IOException e) {                 e.printStackTrace();             }         }         return vos;     }         /**      * 上传文件解压      *      * @param multipartFile 上传文件      * @return 解压后的文件列表      */     public static List<UnzipFileVo> unzip(MultipartFile multipartFile) {         File file = getFile(multipartFile);         if (Objects.isNull(file)) {             return Collections.emptyList();         }         List<UnzipFileVo> vos = unzip(file);         if (file.exists()) {             boolean delete = file.delete();             if (delete) {                 System.out.println(file.getName() + " 临时文件删除成功!");             } else {                 System.out.println(file.getName() + " 临时文件删除失败!");             }         }         return vos;     }       /**      * MultipartFile 转 File      *      * @param multipartFile 上传文件      * @return 本地文件      */     private static File getFile(MultipartFile multipartFile) {         String fileName = System.currentTimeMillis() + "_" + multipartFile.getOriginalFilename();         File file = new File("D://" + fileName);         int len;         try (OutputStream os = new FileOutputStream(file);              InputStream in = multipartFile.getInputStream()) {             byte[] buffer = new byte[BYTE_LEN];             while ((len = in.read(buffer, 0, BYTE_LEN)) != -1) {                 os.write(buffer, 0, len);             }         } catch (IOException e) {             e.printStackTrace();             return null;         }         return file;     } }

调用说明

工具类中提供了两个解压的方式:

方式一:本地文件 File 进行解压。

方式二:上传文件 MultipartFile 进行解压。

package com.sonar.data.controller;   import com.sonar.data.utils.business.UnZipUtils; import com.sonar.data.vo.UnzipFileVo; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile;   import java.io.File; import java.util.List;   /**  * @author Yuanqiang.Zhang  * @since 2022/7/8  */ @RestController @RequestMapping("/test") public class TestController {       /**      * 上传文件解压(示例)      */     @PostMapping("/import")     public List<UnzipFileVo> importTest(@RequestPart("file") MultipartFile mFile) {         return UnZipUtils.unzip(mFile);     }       /**      * 本地文件解压(示例)      */     public static void main(String[] args) {         File file = new File("src.zip");         boolean delete = file.delete();         System.out.println(delete);     }   }

测试效果

我们以上传压缩包解析为例,通过 Postman 进行接口测试,解析的结果如下。

Java如何实现解析zip压缩包并获取文件内容

“Java如何实现解析zip压缩包并获取文件内容”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI