最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)的zip壓縮及解壓縮工具類示例

 更新時間:2018年01月12日 09:49:54   作者:soundfly  
這篇文章主要介紹了Java實現(xiàn)的zip壓縮及解壓縮工具類,結(jié)合實例形式分析了java對文件的進行zip壓縮及解壓縮的具體操作技巧,需要的朋友可以參考下

本文實例講述了Java實現(xiàn)的zip壓縮及解壓縮工具類。分享給大家供大家參考,具體如下:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
public class ZipUtil {
  private static final int BUFFEREDSIZE = 1024;
  /**
   * 壓縮文件
   *
   * @param zipFileName
   *      保存的壓縮包文件路徑
   * @param filePath
   *      需要壓縮的文件夾或者文件路徑
   * @param isDelete
   *      是否刪除源文件
   * @throws Exception
   */
  public void zip(String zipFileName, String filePath, boolean isDelete) throws Exception {
    zip(zipFileName, new File(filePath), isDelete);
  }
  /**
   * 壓縮文件
   *
   * @param zipFileName
   *      保存的壓縮包文件路徑
   * @param inputFile
   *      需要壓縮的文件夾或者文件
   * @param isDelete
   *      是否刪除源文件
   * @throws Exception
   */
  public void zip(String zipFileName, File inputFile, boolean isDelete) throws Exception {
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
    if (!inputFile.exists()) {
      throw new FileNotFoundException("在指定路徑未找到需要壓縮的文件!");
    }
    zip(out, inputFile, "", isDelete);
    out.close();
  }
  /**
   * 遞歸壓縮方法
   *
   * @param out
   *      壓縮包輸出流
   * @param f
   *      需要壓縮的文件
   * @param base
   *      壓縮的路徑
   * @param isDelete
   *      是否刪除源文件
   * @throws Exception
   */
  private void zip(ZipOutputStream out, File inputFile, String base, boolean isDelete) throws Exception {
    if (inputFile.isDirectory()) { // 如果是目錄
      File[] inputFiles = inputFile.listFiles();
      out.putNextEntry(new ZipEntry(base + "/"));
      base = base.length() == 0 ? "" : base + "/";
      for (int i = 0; i < inputFiles.length; i++) {
        zip(out, inputFiles[i], base + inputFiles[i].getName(), isDelete);
      }
    } else { // 如果是文件
      if (base.length() > 0) {
        out.putNextEntry(new ZipEntry(base));
      } else {
        out.putNextEntry(new ZipEntry(inputFile.getName()));
      }
      FileInputStream in = new FileInputStream(inputFile);
      try {
        int len;
        byte[] buff = new byte[BUFFEREDSIZE];
        while ((len = in.read(buff)) != -1) {
          out.write(buff, 0, len);
        }
      } catch (IOException e) {
        throw e;
      } finally {
        in.close();
      }
    }
    if (isDelete) {
      inputFile.delete();
    }
  }
  /**
   * 解壓縮
   *
   * @param zipFilePath
   *      壓縮包路徑
   * @param fileSavePath
   *      解壓路徑
   * @param isDelete
   *      是否刪除源文件
   * @throws Exception
   */
  public void unZip(String zipFilePath, String fileSavePath, boolean isDelete) throws Exception {
    try {
      (new File(fileSavePath)).mkdirs();
      File f = new File(zipFilePath);
      if ((!f.exists()) && (f.length() <= 0)) {
        throw new Exception("要解壓的文件不存在!");
      }
      ZipFile zipFile = new ZipFile(f);
      String strPath, gbkPath, strtemp;
      File tempFile = new File(fileSavePath);// 從當前目錄開始
      strPath = tempFile.getAbsolutePath();// 輸出的絕對位置
      Enumeration<ZipEntry> e = zipFile.getEntries();
      while (e.hasMoreElements()) {
        org.apache.tools.zip.ZipEntry zipEnt = e.nextElement();
        gbkPath = zipEnt.getName();
        if (zipEnt.isDirectory()) {
          strtemp = strPath + File.separator + gbkPath;
          File dir = new File(strtemp);
          dir.mkdirs();
          continue;
        } else {
          // 讀寫文件
          InputStream is = zipFile.getInputStream(zipEnt);
          BufferedInputStream bis = new BufferedInputStream(is);
          gbkPath = zipEnt.getName();
          strtemp = strPath + File.separator + gbkPath;
          // 建目錄
          String strsubdir = gbkPath;
          for (int i = 0; i < strsubdir.length(); i++) {
            if (strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) {
              String temp = strPath + File.separator + strsubdir.substring(0, i);
              File subdir = new File(temp);
              if (!subdir.exists())
                subdir.mkdir();
            }
          }
          FileOutputStream fos = new FileOutputStream(strtemp);
          BufferedOutputStream bos = new BufferedOutputStream(fos);
          int len;
          byte[] buff = new byte[BUFFEREDSIZE];
          while ((len = bis.read(buff)) != -1) {
            bos.write(buff, 0, len);
          }
          bos.close();
          fos.close();
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
    if (isDelete) {
      new File(zipFilePath).delete();
    }
  }
// public static void main(String[] args) {
//   ZipUtil cpr = new ZipUtil();
//   try {
//     cpr.zip("C:/Users/Lenovo User/Desktop/test中文.zip", "C:/Users/Lenovo User/Desktop/新建文件夾", false);
//     cpr.unZip("C:/Users/Lenovo User/Desktop/test中文.zip", "C:/Users/Lenovo User/Desktop/新建文件夾2", false);
//   } catch (Exception e) {
//     e.printStackTrace();
//   }
//
// }
}

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • Java String類用法詳解

    Java String類用法詳解

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Java String類用法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • java的三種隨機數(shù)生成方式

    java的三種隨機數(shù)生成方式

    主要介紹了java的三種隨機數(shù)生成方式的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下
    2021-07-07
  • MyBatis與Hibernate的比較

    MyBatis與Hibernate的比較

    Hibernate 與Mybatis都是流行的持久層開發(fā)框架,但Hibernate開發(fā)社區(qū)相對多熱鬧些,支持的工具也多,更新也快,當前最高版本4.1.8。而Mybatis相對平靜,工具較少,當前最高版本3.2
    2016-01-01
  • JAVA回顧:封裝,繼承,多態(tài)

    JAVA回顧:封裝,繼承,多態(tài)

    這篇文章主要介紹了java封裝繼承多態(tài),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Java Predicate接口源碼使用示例

    Java Predicate接口源碼使用示例

    Java8引入了許多函數(shù)式接口(Functional Interface),Predicate(斷言)就是其中一個,它的主要作用可以簡單描述為:向其傳入一個對象(可以理解為參數(shù)),將得到一個布爾值作為輸出,這篇文章主要介紹了Java Predicate接口源碼使用示例,需要的朋友可以參考下
    2025-04-04
  • 詳解maven的setting配置文件中mirror和repository的區(qū)別

    詳解maven的setting配置文件中mirror和repository的區(qū)別

    這篇文章主要介紹了詳解maven的setting配置文件中mirror和repository的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Java實現(xiàn)自定義中文排序的方法機注意事項

    Java實現(xiàn)自定義中文排序的方法機注意事項

    在Java中,中文排序通常涉及到使用Collator類來處理字符串的比較,確保根據(jù)漢字的拼音順序進行排序,本文給大家介紹了Java實現(xiàn)自定義中文排序的方法機注意事項,并有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-10-10
  • String.join()方法示例詳解

    String.join()方法示例詳解

    String.join() 方法是連接指定數(shù)組的元素或集合的成員,在每個元素或成員之間使用指定的分隔符,這篇文章主要介紹了String.join()方法示例詳解,需要的朋友可以參考下
    2024-01-01
  • Springboot+MyBatis進行日志輸出參考示例

    Springboot+MyBatis進行日志輸出參考示例

    這篇文章主要給大家介紹了關(guān)于Springboot+MyBatis進行日志輸出的相關(guān)資料,在項目開發(fā)過程中,日志是必不可少的,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • 深入淺析Java中普通代碼塊、構(gòu)造代碼塊與靜態(tài)代碼塊

    深入淺析Java中普通代碼塊、構(gòu)造代碼塊與靜態(tài)代碼塊

    這篇文章主要介紹了Java中普通代碼塊、構(gòu)造代碼塊與靜態(tài)代碼塊的相關(guān)資料,靜態(tài)代碼塊>Main()>構(gòu)造代碼塊 。非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08

最新評論

金门县| 石景山区| 原阳县| 迁安市| 中西区| 安新县| 梓潼县| 彰化县| 济源市| 绥棱县| 井冈山市| 奉新县| 藁城市| 昆山市| 万年县| 阳江市| 武川县| 鲁山县| 阿克| 惠安县| 化德县| 道孚县| 景东| 石屏县| 洪洞县| 揭东县| 临沧市| 朝阳市| 延津县| 温泉县| 绥化市| 岐山县| 盖州市| 都昌县| 金寨县| 山阳县| 汽车| 讷河市| 澄江县| 杨浦区| 和硕县|