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

Java解壓縮zip - 解壓縮多個(gè)文件或文件夾實(shí)例

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

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

對(duì)多個(gè)文件和文件夾進(jìn)行壓縮,對(duì)復(fù)雜的文件目錄進(jìn)行解壓。

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

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

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

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

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

下面是壓縮的代碼:

/**
 * 壓縮文件-由于out要在遞歸調(diào)用外,所以封裝一個(gè)方法用來
 * 調(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();
 }
 }

在壓縮的時(shí)候,針對(duì)文件夾進(jìn)行判斷,然后遞歸壓縮文件。

然后是解壓:

/**
 * 解壓到指定目錄
 * @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("******************解壓完畢********************");
 }

解壓的時(shí)候,針對(duì)文件夾判斷創(chuàng)建不存在的文件夾,對(duì)文件夾只創(chuàng)建,不進(jìn)行解壓..因?yàn)榻鈮菏轻槍?duì)文件的,不是文件夾,文件夾需要自己創(chuàng)建。

測(cè)試方法:

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);
 }

測(cè)試方法并沒有對(duì)異常做任何處理,這是不對(duì)的,請(qǐng)不要模仿。

輸出結(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
******************解壓完畢********************

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

相關(guān)文章

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

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

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

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

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

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

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

    SpringBoot自動(dòng)裝配的原理與使用

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

    Kafka攔截器的神奇操作方法

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

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

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

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

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

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

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

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

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

    java實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器類實(shí)例

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

最新評(píng)論