溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Java中向zip壓縮包追加文件

發布時間:2021-06-11 16:15:42 來源:億速云 閱讀:470 作者:Leah 欄目:編程語言

怎么在Java中向zip壓縮包追加文件,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

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、測試

有如下目錄結構:

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();
   }
  }
 }
}

看完上述內容,你們掌握怎么在Java中向zip壓縮包追加文件的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女