基於JAVA代碼實現zip文件解壓

在文檔管理系統中需要實現zip文件的預覽,一般的做法是將zip文件解壓,然後獲取此目錄下的文件信息,此處代碼為利用代碼直接實現zip文件的解壓:

<code>import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

/**
 * 
 * 
 * @author Kaven Mei
 * @company KAVEN(www.kaven.cn)
 * @date 2020年4月10日 上午9:44:45
 * @version 1.0
 */

public class ZipTest {

  private static ZipFile zipFile;

  public static void main(String[] args) {
    String directoryPath = "F:/zipFile/";// 解壓路徑
    String filePath = "F:/zipFile/nginx-1.8.1.zip";// 解壓文件
    try {
      printZipTxt(filePath);
      unZipFiles(filePath, directoryPath);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * 獲取zip文件中的內容
   * 
   * @param zipPathStr
   * @throws IOException
   */
  public static void printZipTxt(String zipPathStr) throws IOException {
    zipFile = new ZipFile(zipPathStr);
    for (Enumeration extends ZipEntry> e = zipFile.entries(); e.hasMoreElements();) {
      ZipEntry entry = e.nextElement();
      System.out.println("文件名:" + entry.getName() + ", 內容如下:");
      if (entry.getName().toLowerCase().endsWith(".txt")) {
        InputStream is = null;
        is = zipFile.getInputStream(entry);
        byte[] b = new byte[1024];
        int leng = -1;
        String txtStr = "";
        while ((leng = is.read(b)) != -1) {
          txtStr += new String(b, 0, leng);
        }
        System.out.println(txtStr);
        if (is != null) {
          is.close();
        }
      }
    }
  }

  /**
   * 創建zip中文件目錄
   * 
   * @param zipPath
   * @param descDir
   * @throws IOException
   */
  public static void unZipFiles(String zipPath, String descDir) throws IOException {
    unZipFiles(new File(zipPath), descDir);
  }

  /**
   * 解壓內容
   * 
   * @param zipFile
   * @param descDir
   * @throws IOException
   */
  @SuppressWarnings("rawtypes")
  public static void unZipFiles(File fileZip, String descDir) throws IOException {
    File pathFile = new File(descDir);
    if (!pathFile.exists()) {
      pathFile.mkdirs();
    }
    zipFile = new ZipFile(fileZip);
    for (Enumeration entries = zipFile.entries(); entries.hasMoreElements();) {
      ZipEntry entry = (ZipEntry) entries.nextElement();
      String zipEntryName = entry.getName();
      InputStream in = zipFile.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();
    }
    System.out.println("******************解壓完畢********************");
  }
}/<code>


分享到:


相關文章: