Java實現解壓縮ZIP
阿新 • • 發佈:2021-10-19
Java實現解壓縮ZIP,MultipartFile 轉為File工具類
*問題:將MultipartFile轉化為File後,放到ZipFile中,使用zipFile.size方法獲取數量及壓縮檔案中的檔名稱,會出現一個名為壓縮包檔名稱的檔案,數量同樣多一個。*
Java實現解壓縮ZIP
1、MultipartFile 轉為File工具類
@Component public class MultipartFileToFile { public File ultipartFileToFile(MultipartFile file) throws Exception { File toFile = null; if (file.equals("") || file.getSize() <= 0) { file = null; } else { InputStream ins = null; ins = file.getInputStream(); toFile = new File(file.getOriginalFilename()); inputStreamToFile(ins, toFile); 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(); ins.close(); } catch (Exception e) { e.printStackTrace(); } }
2、獲取壓縮檔案中的全部檔名稱
@Resource private MultipartFileToFile multipartFileToFile; /** * 獲取壓縮檔案中的全部檔名稱 * @param multipartFile * @return List */ @PostMapping("getFileName") public R getFileName(MultipartFile multipartFile){ //建立List,存放獲取的檔名稱 List<String> list = new ArrayList<>(); File file=null; try { //將MultipartFile轉化為File file = multipartFileToFile.ultipartFileToFile(multipartFile); //建立ZipFile物件,解析file檔案 ZipFile zipFile = new ZipFile(file); //獲取壓縮檔案中的檔案個數 int size = zipFile.size(); Enumeration<? extends ZipEntry> entries = zipFile.entries(); while (entries.hasMoreElements()) { list.add(entries.nextElement().getName()); } } catch (Exception e) { e.printStackTrace(); } System.out.println(list); return R.ok().data("list",list); }
3、解壓檔案到指定目錄
/** * 解壓檔案到指定目錄 * @param multipartFile * @return success/error */ @PostMapping("decmpressionFile") public R decmpression(MultipartFile multipartFile){ //指定壓縮檔案存放路徑(最後一個/不能少) String descDir="F://online-education/"; File Zipfile=null; try { //將MultipartFile轉化為File Zipfile = multipartFileToFile.ultipartFileToFile(multipartFile); File pathFile = new File(descDir); if(!pathFile.exists()) { pathFile.mkdirs(); } //解決zip檔案中有中文目錄或者中文檔案 ZipFile zip = new ZipFile(Zipfile, Charset.forName("GBK")); for(Enumeration entries = zip.entries(); entries.hasMoreElements();) { ZipEntry entry = (ZipEntry)entries.nextElement(); String zipEntryName = entry.getName(); InputStream in = zip.getInputStream(entry); String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");; //判斷路徑是否存在,不存在則建立檔案路徑 File file = new File(outPath.substring(0, outPath.lastIndexOf('/'))); if(!file.exists()) { file.mkdirs(); } //判斷檔案全路徑是否為資料夾,如果是上面已經上傳,不需要解壓 if(new File(outPath).isDirectory()) { continue; } //輸出檔案路徑資訊 System.out.println(outPath); OutputStream out = new FileOutputStream(outPath); byte[] buf1 = new byte[1024]; int len; while((len=in.read(buf1))>0) { out.write(buf1,0,len); } in.close(); out.close(); } } catch (Exception e) { e.printStackTrace(); } return R.ok(); }
*問題:將MultipartFile轉化為File後,放到ZipFile中,使用zipFile.size方法獲取數量及壓縮檔案中的檔名稱,會出現一個名為壓縮包檔名稱的檔案,數量同樣多一個。*