麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Java > 正文

Java實現(xiàn)的zip工具類完整實例

2024-07-14 08:43:11
字體:
來源:轉載
供稿:網(wǎng)友

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

實現(xiàn)把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("//*", "/");    // 判斷路徑是否存在,不存在則創(chuàng)建文件路徑    File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));    if (!file.exists())    {     file.mkdirs();    }    // 判斷文件全路徑是否為文件夾,如果是上面已經(jīng)上傳,不需要解壓    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:所有文件跑到壓縮包根目錄下(注意:不保留目錄結構可能會出現(xiàn)同名文件,會壓縮失敗)   * @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教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品一区二区三区在线观看视频 | 国产精品区一区二区三区 | 国产免费久久久久 | 亚洲天堂在线电影 | 久久久久久久91 | 性欧美在线视频 | 91精品国产综合久久男男 | 黄色美女网站免费看 | 国产日本欧美在线观看 | 欧美精品亚洲人成在线观看 | 国产成人高清在线观看 | 成人在线视频免费看 | 毛片免费视频在线观看 | 精品国产观看 | 国产精品久久久久久久久久久久午夜 | 亚洲成人自拍电影 | 欧美一极视频 | 成人一级毛片 | 爱视频福利 | 操操插插 | 国产亚洲精品久久久久久久久久 | 蜜桃成品人免费视频 | 国产精品久久久乱弄 | 成人福利视频在 | 国产精品成人一区二区三区吃奶 | 久久国产精品久久久久久 | 国产精品av久久久久久网址 | 久久国产在线观看 | 国产一区视频在线免费观看 | 国产免费福利视频 | 亚洲涩涩图 | 大片毛片 | 亚洲天堂在线电影 | 12av毛片| 国产免费网站视频 | 精品成人免费视频 | 91精品国产777在线观看 | 欧美三级欧美成人高清www | 97人操| 中国老女人一级毛片视频 | 一本免费视频 |