您好,登錄后才能下訂單哦!
怎么在Java中向zip壓縮包追加文件,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
1、一個zip文件的壓縮和解壓工具類
pom.xml加入依賴包,如下:
<dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.10.7</version> </dependency>
工具類代碼:
package com.example.demo; import java.io.*; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipException; import org.apache.tools.zip.*; public class ZipUtil { private static int BUFFERSIZE = 1024; /** * 壓縮 * * @param paths * @param fileName */ public static void zip(List<String> paths, String fileName) { ZipOutputStream zos = null; try { zos = new ZipOutputStream(new FileOutputStream(fileName)); for (String filePath : paths) { // 遞歸壓縮文件 File file = new File(filePath); String relativePath = file.getName(); if (file.isDirectory()) { relativePath += File.separator; } zipFile(file, relativePath, zos); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (zos != null) { zos.close(); } } catch (IOException e) { e.printStackTrace(); } } } public static void zipFile(File file, String relativePath, ZipOutputStream zos) { InputStream is = null; try { if (!file.isDirectory()) { ZipEntry zp = new ZipEntry(relativePath); zos.putNextEntry(zp); is = new FileInputStream(file); byte[] buffer = new byte[BUFFERSIZE]; int length = 0; while ((length = is.read(buffer)) >= 0) { zos.write(buffer, 0, length); } zos.setEncoding("gbk");//解決文件名中文亂碼 zos.flush(); zos.closeEntry(); } else { String tempPath = null; for (File f : file.listFiles()) { tempPath = relativePath + f.getName(); if (f.isDirectory()) { tempPath += File.separator; } zipFile(f, tempPath, zos); } } } catch (IOException e) { e.printStackTrace(); } finally { try { if (is != null) { is.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * 解壓縮 * * @param fileName * @param path */ public static List<String> unzip(String fileName, String path) { FileOutputStream fos = null; InputStream is = null; List<String> filePaths = new ArrayList<String>(); try { ZipFile zf = new ZipFile(new File(fileName)); Enumeration en = zf.getEntries(); while (en.hasMoreElements()) { ZipEntry zn = (ZipEntry) en.nextElement(); if (!zn.isDirectory()) { is = zf.getInputStream(zn); File f = new File(path + zn.getName()); File file = f.getParentFile(); file.mkdirs(); fos = new FileOutputStream(path + zn.getName()); int len = 0; byte bufer[] = new byte[BUFFERSIZE]; while (-1 != (len = is.read(bufer))) { fos.write(bufer, 0, len); } fos.close(); filePaths.add(path + zn.getName()); } } } catch (ZipException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != is) { is.close(); } if (null != fos) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } return filePaths; } }
2、測試
有如下目錄結(jié)構(gòu):
D:\測試\文檔.zip
D:\測試\說明.pdf
把“說明.pdf”添加到“文檔.zip”里面,生成一個新壓縮包“文檔(新).zip”。
package com.example.demo; import java.io.File; import java.util.List; public class ZipUtilTest { public static void main(String[] args) { //解壓 List<String> files = ZipUtil.unzip("D:/測試/文檔.zip", "D:/測試/"); //集合添加文件 files.add("D:/測試/說明.pdf"); //壓縮 ZipUtil.zip(files,"D:/測試/文檔(新).zip"); //保留說明.pdf files.remove(files.size()-1); //刪除上面解壓出來的文件 for(String f : files){ File file = new File(f); if(file.exists()){ file.delete(); } } } }
看完上述內(nèi)容,你們掌握怎么在Java中向zip壓縮包追加文件的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。