直接上步骤
(1)将前台传输的mutipartFile转为file
public static File multipartFileToFile(MultipartFile multipartFile) throws Exception { File toFile = null; if (multipartFile.isEmpty()) { log.error("zip "+ multipartFile.getOriginalFilename() +" is empty,so unzip error!!!"); multipartFile = null; } else { InputStream ins = null; ins = multipartFile.getInputStream(); toFile = new File(multipartFile.getOriginalFilename()); inputStreamToFile(ins, toFile); if(ins != null){ ins.close(); } } return toFile; }
private 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.close(); } catch (Exception e) { log.error("zip "+ file.getName() +" inputStream To File error!!!"); e.printStackTrace(); } }
(2)解压缩
//解压缩
log.info("zip "+ multipartFile.getOriginalFilename() +" unzip start");
this.unZip(multipartFileToFile(multipartFile), filespath, Constants.CSV_PASSWORD);
log.info("zip "+ multipartFile.getOriginalFilename() +" unzip end");
/** * @Author * @Description 解压缩zip并且解开密码 * @Date 14:12 2021/1/25 * @Param * @return **/ public static void unZip(File file, String dest, String password) throws IOException{ try { ZipFile zFile = new ZipFile(file); zFile.setFileNameCharset("GBK"); File destDir = new File(dest); if (!destDir.exists()) { destDir.mkdirs(); } zFile.setPassword(password.toCharArray()); zFile.extractAll(dest); } catch (Exception e) { log.error("zip "+ file.getName() +" unzip error !!!!! exist exception e is "+e.getLocalizedMessage()); e.printStackTrace(); } }
(3)获取解压之后的文件
File[] files = new File(filespath).listFiles();
(4)对了,需要加入依赖
<dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId> <version>1.3.2</version> </dependency>