欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java解壓縮zip - 解壓縮多個文件或文件夾實例

 更新時間:2016年12月14日 11:46:07   作者:isea533  
本篇文章主要介紹了Java解壓縮zip - 解壓縮多個文件或文件夾實例,非常具有實用價值,有需要的可以了解一下。

Java解壓縮zip - 多個文件(包括文件夾),具體如下:

對多個文件和文件夾進行壓縮,對復(fù)雜的文件目錄進行解壓。

壓縮方法使用的是可變參數(shù),可以壓縮1到多個文件..可以寫數(shù)組的方式或者一個個寫到參數(shù)列表里面...

ZipFiles(zip,"abc",new File("d:/English"),new File("d:/發(fā)放數(shù)據(jù).xls"));

測試文件目錄結(jié)構(gòu):

測試的壓縮內(nèi)容:English文件夾和同級的兩個excel文件

File[] files = new File[]{new File("d:/English"),new File("d:/發(fā)放數(shù)據(jù).xls"),new File("d:/中文名稱.xls")};

下面是壓縮的代碼:

/**
 * 壓縮文件-由于out要在遞歸調(diào)用外,所以封裝一個方法用來
 * 調(diào)用ZipFiles(ZipOutputStream out,String path,File... srcFiles)
 * @param zip
 * @param path
 * @param srcFiles
 * @throws IOException
 * @author isea533
 */
 public static void ZipFiles(File zip,String path,File... srcFiles) throws IOException{
 ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zip));
 ZipTest.ZipFiles(out,path,srcFiles);
 out.close();
 System.out.println("*****************壓縮完畢*******************");
 }
 /**
 * 壓縮文件-File
 * @param zipFile zip文件
 * @param srcFiles 被壓縮源文件
 * @author isea533
 */
 public static void ZipFiles(ZipOutputStream out,String path,File... srcFiles){
 path = path.replaceAll("\\*", "/");
 if(!path.endsWith("/")){
  path+="/";
 }
 byte[] buf = new byte[1024];
 try {
  for(int i=0;i<srcFiles.length;i++){
  if(srcFiles[i].isDirectory()){
   File[] files = srcFiles[i].listFiles();
   String srcPath = srcFiles[i].getName();
   srcPath = srcPath.replaceAll("\\*", "/");
   if(!srcPath.endsWith("/")){
   srcPath+="/";
   }
   out.putNextEntry(new ZipEntry(path+srcPath));
   ZipFiles(out,path+srcPath,files);
  }
  else{
   FileInputStream in = new FileInputStream(srcFiles[i]);
   System.out.println(path + srcFiles[i].getName());
   out.putNextEntry(new ZipEntry(path + srcFiles[i].getName()));
   int len;
   while((len=in.read(buf))>0){
   out.write(buf,0,len);
   }
   out.closeEntry();
   in.close();
  }
  }
 } catch (Exception e) {
  e.printStackTrace();
 }
 }

在壓縮的時候,針對文件夾進行判斷,然后遞歸壓縮文件。

然后是解壓:

/**
 * 解壓到指定目錄
 * @param zipPath
 * @param descDir
 * @author isea533
 */
 public static void unZipFiles(String zipPath,String descDir)throws IOException{
 unZipFiles(new File(zipPath), descDir);
 }
 /**
 * 解壓文件到指定目錄
 * @param zipFile
 * @param descDir
 * @author isea533
 */
 @SuppressWarnings("rawtypes")
 public static void unZipFiles(File zipFile,String descDir)throws IOException{
 File pathFile = new File(descDir);
 if(!pathFile.exists()){
  pathFile.mkdirs();
 }
 ZipFile zip = new ZipFile(zipFile);
 for(Enumeration entries = zip.getEntries();entries.hasMoreElements();){
  ZipEntry entry = (ZipEntry)entries.nextElement();
  String zipEntryName = entry.getName();
  InputStream in = zip.getInputStream(entry);
  String outPath = (descDir+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;
  }
  //輸出文件路徑信息
  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("******************解壓完畢********************");
 }

解壓的時候,針對文件夾判斷創(chuàng)建不存在的文件夾,對文件夾只創(chuàng)建,不進行解壓..因為解壓是針對文件的,不是文件夾,文件夾需要自己創(chuàng)建。

測試方法:

public static void main(String[] args) throws IOException {
 /**
  * 壓縮文件
  */
 File[] files = new File[]{new File("d:/English"),new File("d:/發(fā)放數(shù)據(jù).xls"),new File("d:/中文名稱.xls")};
 File zip = new File("d:/壓縮.zip");
 ZipFiles(zip,"abc",files);
 
 /**
  * 解壓文件
  */
 File zipFile = new File("d:/壓縮.zip");
 String path = "d:/zipfile/";
 unZipFiles(zipFile, path);
 }

測試方法并沒有對異常做任何處理,這是不對的,請不要模仿。

輸出結(jié)果:

abc/English/templete.xls
abc/English/中文/csdn/isea/533/abc/templete.xls
abc/English/中文/csdn/isea/533/abc/zipfile2/templete.xls
abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/templete.xls
abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/templete.xls
abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/領(lǐng)卡清單.xls
abc/English/中文/csdn/isea/533/abc/zipfile2/領(lǐng)卡清單.xls
abc/English/中文/csdn/isea/templete.xls
abc/English/中文/csdn/isea/領(lǐng)卡清單.xls
abc/English/中文/csdn/templete.xls
abc/English/領(lǐng)卡清單.xls
abc/發(fā)放數(shù)據(jù).xls
abc/中文名稱.xls
*****************壓縮完畢*******************
d:/zipfile/abc/中文名稱.xls
d:/zipfile/abc/發(fā)放數(shù)據(jù).xls
d:/zipfile/abc/English/領(lǐng)卡清單.xls
d:/zipfile/abc/English/中文/csdn/templete.xls
d:/zipfile/abc/English/中文/csdn/isea/領(lǐng)卡清單.xls
d:/zipfile/abc/English/中文/csdn/isea/templete.xls
d:/zipfile/abc/English/中文/csdn/isea/533/abc/templete.xls
d:/zipfile/abc/English/templete.xls
d:/zipfile/abc/English/中文/csdn/isea/533/abc/zipfile2/templete.xls
d:/zipfile/abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/templete.xls
d:/zipfile/abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/templete.xls
d:/zipfile/abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/領(lǐng)卡清單.xls
d:/zipfile/abc/English/中文/csdn/isea/533/abc/zipfile2/領(lǐng)卡清單.xls
******************解壓完畢********************

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JDBC編程實現(xiàn)文件、圖片的存儲方法

    JDBC編程實現(xiàn)文件、圖片的存儲方法

    這篇文章主要介紹了JDBC編程實現(xiàn)文件、圖片的存儲方法,以實例形式分析了Java基于JDBC操作數(shù)據(jù)庫的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Java找出1000以內(nèi)的所有完數(shù)

    Java找出1000以內(nèi)的所有完數(shù)

    一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為 "完數(shù) "。例如6=1+2+3.編程找出1000以內(nèi)的所有完數(shù)
    2017-02-02
  • 一篇文章帶你了解Java 中序列化與反序列化

    一篇文章帶你了解Java 中序列化與反序列化

    這篇文章主要介紹了Java 序列化與反序列化(Serialization),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • SpringBoot自動裝配的原理與使用

    SpringBoot自動裝配的原理與使用

    在現(xiàn)代的軟件開發(fā)中,依賴管理是一個關(guān)鍵的任務(wù),隨著應(yīng)用程序規(guī)模的增長,手動管理對象之間的依賴關(guān)系變得越來越復(fù)雜,為了解決這個問題,Spring Boot提供了一種強大的功能,即自動裝配,感興趣想要詳細了解可以參考下文
    2023-05-05
  • Kafka攔截器的神奇操作方法

    Kafka攔截器的神奇操作方法

    Kafka攔截器是一種強大的機制,用于在消息發(fā)送和接收過程中插入自定義邏輯,它們可以用于消息定制、日志記錄、監(jiān)控、業(yè)務(wù)邏輯集成、性能統(tǒng)計和異常處理等,本文介紹Kafka攔截器的神奇操作,感興趣的朋友一起看看吧
    2025-01-01
  • SpringCloud-Gateway轉(zhuǎn)發(fā)WebSocket失敗問題及解決

    SpringCloud-Gateway轉(zhuǎn)發(fā)WebSocket失敗問題及解決

    這篇文章主要介紹了SpringCloud-Gateway轉(zhuǎn)發(fā)WebSocket失敗問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java SPI模塊化解耦的技術(shù)指南

    Java SPI模塊化解耦的技術(shù)指南

    Java 的 Service Provider Interface (SPI) 是一種提供模塊化和擴展性的方法,使得程序能夠通過動態(tài)加載服務(wù)實現(xiàn)類來實現(xiàn)解耦,本文將詳細介紹 Java SPI 的機制、應(yīng)用場景及實現(xiàn)步驟,并通過示例代碼展示如何使用 SPI,需要的朋友可以參考下
    2025-03-03
  • 詳解Spring AOP的實現(xiàn)方式

    詳解Spring AOP的實現(xiàn)方式

    AOP是一種思想,是對某一類事情的集中處理,切面就是指某一類特定的問題,所以AOP可以理解為面向特定方法編程,這篇文章主要介紹了Spring AOP的實現(xiàn)方式,需要的朋友可以參考下
    2024-02-02
  • SpringBoot整合aop面向切面編程過程解析

    SpringBoot整合aop面向切面編程過程解析

    這篇文章主要介紹了SpringBoot整合aop面向切面編程過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • java實現(xiàn)簡單的計算器類實例

    java實現(xiàn)簡單的計算器類實例

    這篇文章主要介紹了java實現(xiàn)簡單的計算器類,涉及java針對鍵盤監(jiān)聽及數(shù)字運算的處理技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10

最新評論