亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java實現的zip工具類完整實例

2024-07-14 08:43:11
字體:
來源:轉載
供稿:網友

本文實例講述了Java實現的zip工具類。分享給大家供大家參考,具體如下:

實現把zip解壓到指定路徑,把文件夾壓縮到zip,把文件列表壓縮為zip的三個方法

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;import java.util.zip.ZipOutputStream;public class ZipUtils{  /**   * 解壓zip到指定路徑   * @param zipFile 待解壓文件   * @param descDir 指定解壓路徑   * @return fileNames 解壓的全部文件名   * @throws IOException   */  public static List<String> unZipFiles(File zipFile, String descDir) throws IOException {     List<String> fileNames = new ArrayList<String>();  ZipFile zip = new ZipFile(zipFile,Charset.forName("GBK"));//解決中文文件夾亂碼   String name = zip.getName().substring(zip.getName().lastIndexOf('//')+1, zip.getName().lastIndexOf('.'));   File pathFile = new File(descDir+name);   if (!pathFile.exists())   {    pathFile.mkdirs();   }   String outPath = "";  for (Enumeration<? extends ZipEntry> entries = zip.entries(); entries.hasMoreElements();)  {    ZipEntry entry = (ZipEntry) entries.nextElement();    String zipEntryName = entry.getName();    fileNames.add(zipEntryName);   InputStream in = zip.getInputStream(entry);    outPath = (descDir + name +"/"+ zipEntryName).replaceAll("//*", "/");    // 判斷路徑是否存在,不存在則創建文件路徑    File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));    if (!file.exists())    {     file.mkdirs();    }    // 判斷文件全路徑是否為文件夾,如果是上面已經上傳,不需要解壓    if (new File(outPath).isDirectory())    {     continue;    }    // 輸出文件路徑信息    FileOutputStream 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();   }   pathFile.delete();  return fileNames;  }  /**   * 壓縮文件夾成zip   * @param srcDir 待打包的文件夾路徑   * @param out 打包文件名及存儲路徑   * @param KeepDirStructure 是否保留文件夾結構 不保留則把文件夾下全部文件都打壓在一起   * @throws RuntimeException   */  public static void docToZip(String srcDir, OutputStream out, boolean KeepDirStructure)throws RuntimeException  {    long start = System.currentTimeMillis();    ZipOutputStream zos = null ;    try     {      zos = new ZipOutputStream(out);      File sourceFile = new File(srcDir);      compress(sourceFile,zos,sourceFile.getName(),KeepDirStructure);      long end = System.currentTimeMillis();      System.out.println("壓縮完成,耗時:" + (end - start) +" ms");    } catch (Exception e)     {      throw new RuntimeException("zip error from ZipUtils",e);    }finally    {      if(zos != null)      {        try         {          zos.close();        } catch (IOException e)        {          e.printStackTrace();        }      }    }  }  /**   * 壓縮成ZIP 將多個文件大包   * @param srcFiles 需要壓縮的文件列表   * @param out     壓縮文件輸出流   * @throws RuntimeException 壓縮失敗會拋出運行時異常   */  public static void filesToZip(List<File> srcFiles , OutputStream out)throws RuntimeException   {    long start = System.currentTimeMillis();    ZipOutputStream zos = null ;    int BUFFER_SIZE = 2 * 1024;    try     {      zos = new ZipOutputStream(out);      for (File srcFile : srcFiles)       {        byte[] buf = new byte[BUFFER_SIZE];        zos.putNextEntry(new ZipEntry(srcFile.getName()));        int len;        FileInputStream in = new FileInputStream(srcFile);        while ((len = in.read(buf)) != -1)        {          zos.write(buf, 0, len);        }        zos.closeEntry();        in.close();      }      long end = System.currentTimeMillis();      System.out.println("壓縮完成,耗時:" + (end - start) +" ms");    } catch (Exception e)     {      throw new RuntimeException("zip error from ZipUtils",e);    }finally    {      if(zos != null)      {        try         {          zos.close();        } catch (IOException e)        {          e.printStackTrace();        }      }    }  }  /**   * 遞歸壓縮方法   * @param sourceFile 源文件   * @param zos     zip輸出流   * @param name     壓縮后的名稱   * @param KeepDirStructure 是否保留原來的目錄結構,true:保留目錄結構;    *               false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結構可能會出現同名文件,會壓縮失敗)   * @throws Exception   */  private static void compress(File sourceFile, ZipOutputStream zos, String name,      boolean KeepDirStructure) throws Exception  {    int BUFFER_SIZE = 2 * 1024;    byte[] buf = new byte[BUFFER_SIZE];    if(sourceFile.isFile())    {      // 向zip輸出流中添加一個zip實體,構造器中name為zip實體的文件的名字      zos.putNextEntry(new ZipEntry(name));      // copy文件到zip輸出流中      int len;      FileInputStream in = new FileInputStream(sourceFile);      while ((len = in.read(buf)) != -1)      {        zos.write(buf, 0, len);      }      // Complete the entry      zos.closeEntry();      in.close();    } else    {      File[] listFiles = sourceFile.listFiles();      if(listFiles == null || listFiles.length == 0)      {        // 需要保留原來的文件結構時,需要對空文件夾進行處理        if(KeepDirStructure)        {          // 空文件夾的處理          zos.putNextEntry(new ZipEntry(name + "/"));          // 沒有文件,不需要文件的copy          zos.closeEntry();        }      }else       {        for (File file : listFiles)         {          // 判斷是否需要保留原來的文件結構          if (KeepDirStructure)           {            // 注意:file.getName()前面需要帶上父文件夾的名字加一斜杠,            // 不然最后壓縮包中就不能保留原來的文件結構,即:所有文件都跑到壓縮包根目錄下了            compress(file, zos, name + "/" + file.getName(),KeepDirStructure);          } else           {            compress(file, zos, file.getName(),KeepDirStructure);          }        }      }    }  }}

 

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


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品第一国产综合精品| 亲爱的老师9免费观看全集电视剧| 日韩电视剧免费观看网站| 精品国产一区二区三区久久| 色哟哟网站入口亚洲精品| 精品亚洲一区二区三区| 国产情人节一区| 欧美精品成人91久久久久久久| 97视频免费看| 久久综合伊人77777蜜臀| 在线亚洲男人天堂| www.亚洲一区| 国产欧美日韩中文| 欧美性xxxx极品hd满灌| 国产精品美女久久久免费| 日本国产精品视频| 欧美国产日本高清在线| 亚洲男人天堂手机在线| 欧美一级黑人aaaaaaa做受| 国产欧美日韩精品专区| 日韩成人久久久| 91久久久久久| 国产精品久久久久久久av大片| 久久国产精品偷| 国产一区二区在线免费| 国产99久久精品一区二区永久免费| 国产+人+亚洲| 久久影院中文字幕| 国产精品亚洲片夜色在线| 中文字幕亚洲欧美日韩高清| 欧美在线视频观看免费网站| 久久久久久久影院| 欧洲中文字幕国产精品| 91美女片黄在线观看游戏| 91高潮在线观看| 日韩av电影在线免费播放| 久久久久国产视频| 久久久久久久成人| 日韩电影第一页| 欧美日韩亚洲一区二区| 欧美日韩一区二区免费在线观看| 亚洲福利在线视频| 欧美尤物巨大精品爽| 九九热在线精品视频| 中文字幕亚洲无线码a| 国产一区香蕉久久| 国产福利精品在线| 亚洲天天在线日亚洲洲精| 欧美壮男野外gaytube| 国产日韩欧美视频在线| 亚洲欧美日韩国产精品| 91中文字幕在线观看| 亚洲一区亚洲二区亚洲三区| 91精品国产自产在线老师啪| 色妞在线综合亚洲欧美| 亚洲精品自产拍| 成人妇女免费播放久久久| 爽爽爽爽爽爽爽成人免费观看| 亚洲网在线观看| 91精品国产九九九久久久亚洲| 亚洲欧美中文日韩在线v日本| 国产ts人妖一区二区三区| 欧美亚洲国产成人精品| 国产亚洲美女精品久久久| 一区二区三区美女xx视频| 国产精品一区二区三区在线播放| 亚洲第一页在线| 国产视频999| 久久亚洲精品视频| 亚洲欧美资源在线| 91久久夜色精品国产网站| 91av视频在线观看| 日韩电影视频免费| 欧美电影免费观看高清| 91久久久久久久久久| 国产成人91久久精品| 亚洲人在线视频| 中文字幕在线观看亚洲| 亚洲影院高清在线| 国产乱肥老妇国产一区二| 精品中文字幕在线观看| 欧美一级电影在线| 久久99精品久久久久久琪琪| 成人黄色片网站| 亚洲免费中文字幕| 国产97免费视| 亚洲欧美精品一区| 国产精品久久久久久久久借妻| 国产成人精品视频在线观看| 2019中文字幕全在线观看| 欧美成人免费一级人片100| 亚洲一级黄色av| 日韩av网址在线观看| 亚洲91精品在线| 国产成人在线亚洲欧美| 中文字幕欧美日韩精品| 在线观看欧美成人| 国产成人精品国内自产拍免费看| 一道本无吗dⅴd在线播放一区| 日韩在线观看视频免费| 国产成人aa精品一区在线播放| 久久亚洲国产成人| 欧美成人精品不卡视频在线观看| 国产不卡精品视男人的天堂| 精品久久久一区二区| 国产精品一区二区av影院萌芽| 国产精国产精品| 91久久精品美女| 日韩电影在线观看永久视频免费网站| 一区二区在线视频播放| 7777精品久久久久久| 福利视频导航一区| 欧美另类99xxxxx| 日本免费在线精品| 欧美成人激情视频免费观看| 综合国产在线视频| 国产视频久久网| 伊人久久免费视频| 成人午夜激情免费视频| 久久久久久久久91| 欧美日韩一区二区三区| 亚洲乱码国产乱码精品精天堂| 国产一区二区三区在线免费观看| 91精品久久久久久久久不口人| 在线视频亚洲欧美| 国产精品爽爽爽爽爽爽在线观看| 日韩av黄色在线观看| 45www国产精品网站| 日本aⅴ大伊香蕉精品视频| 亚洲最大av网| 亚洲电影免费在线观看| 欧美日韩视频在线| 亚洲香蕉成视频在线观看| 国产精品第七十二页| 亚洲一区二区在线| 日韩美女视频免费看| 亚洲精品电影在线观看| 国产精品一区二区电影| 亚洲第一视频网站| 欧美另类极品videosbestfree| 亚洲三级 欧美三级| 欧美劲爆第一页| 亚洲国产欧美一区| 成人做爰www免费看视频网站| 日韩成人在线电影网| 午夜欧美不卡精品aaaaa| 欧美精品videosex性欧美| 日韩在线观看高清| 国产亚洲精品久久久久久牛牛| 国产精品久久久久久久久免费| 国产成人高潮免费观看精品| 91免费国产网站| 欧美一级视频一区二区| 亚洲男人的天堂在线播放| 亚洲人成五月天| 性欧美暴力猛交69hd| 亚洲精品动漫100p| 国产日韩视频在线观看| 亚洲一区二区三区乱码aⅴ| 懂色aⅴ精品一区二区三区蜜月| 久久色免费在线视频| 亚洲高清色综合| 国产亚洲精品成人av久久ww| 免费不卡欧美自拍视频|