您好,登錄后才能下訂單哦!
本篇內容介紹了“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壓縮包并獲取文件內容”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。