Java壓縮解壓zip技術(shù)_動力節(jié)點(diǎn)Java學(xué)院整理
Java解壓縮zip - 多個(gè)文件(包括文件夾),對多個(gè)文件和文件夾進(jìn)行壓縮,對復(fù)雜的文件目錄進(jìn)行解壓。壓縮方法使用的是可變參數(shù),可以壓縮1到多個(gè)文件..可以寫數(shù)組的方式或者一個(gè)個(gè)寫到參數(shù)列表里面...
ZipFiles(zip,"abc",new File("d:/English"),new File("d:/發(fā)放數(shù)據(jù).xls"));
測試文件目錄結(jié)構(gòu):

測試的壓縮內(nèi)容:English文件夾和同級的兩個(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
*
*/
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 被壓縮源文件
*
*/
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í)候,針對文件夾進(jìn)行判斷,然后遞歸壓縮文件。
然后是解壓:
/**
* 解壓到指定目錄
* @param zipPath
* @param descDir
*
*/
public static void unZipFiles(String zipPath,String descDir)throws IOException{
unZipFiles(new File(zipPath), descDir);
}
/**
* 解壓文件到指定目錄
* @param zipFile
* @param descDir
*
*/
@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í)候,針對文件夾判斷創(chuàng)建不存在的文件夾,對文件夾只創(chuàng)建,不進(jìn)行解壓..因?yàn)榻鈮菏轻槍ξ募?,不是文件夾,文件夾需要自己創(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/中文/bjpowernode/isea/533/abc/templete.xls abc/English/中文/bjpowernode/isea/533/abc/zipfile2/templete.xls abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/templete.xls abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/zipfile2/templete.xls abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/zipfile2/領(lǐng)卡清單.xls abc/English/中文/bjpowernode/isea/533/abc/zipfile2/領(lǐng)卡清單.xls abc/English/中文/bjpowernode/isea/templete.xls abc/English/中文/bjpowernode/isea/領(lǐng)卡清單.xls abc/English/中文/bjpowernode/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/中文/bjpowernode/templete.xls d:/zipfile/abc/English/中文/bjpowernode/isea/領(lǐng)卡清單.xls d:/zipfile/abc/English/中文/bjpowernode/isea/templete.xls d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/templete.xls d:/zipfile/abc/English/templete.xls d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/zipfile2/templete.xls d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/templete.xls d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/zipfile2/templete.xls d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/zipfile2/zipfile/abc/zipfile2/領(lǐng)卡清單.xls d:/zipfile/abc/English/中文/bjpowernode/isea/533/abc/zipfile2/領(lǐng)卡清單.xls ******************解壓完畢********************

以上所述是小編給大家介紹的Java壓縮解壓zip技術(shù),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404
在本篇文章里小編給大家整理的是一篇關(guān)于如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404相關(guān)文章,需要的朋友們學(xué)習(xí)下。2019-11-11
Java class文件格式之?dāng)?shù)據(jù)類型(二)_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java class文件格式之?dāng)?shù)據(jù)類型(二)的相關(guān)資料,需要的朋友可以參考下2017-06-06
Java NumberFormat 類的詳解及實(shí)例
這篇文章主要介紹了Java NumberFormat 類的詳解及實(shí)例的相關(guān)資料,數(shù)字格式化類按照本地風(fēng)格習(xí)慣進(jìn)行的數(shù)字顯示,需要的朋友可以參考下2017-08-08
IDEA 中創(chuàng)建SpringBoot 父子模塊的實(shí)現(xiàn)
這篇文章主要介紹了IDEA 中創(chuàng)建SpringBoot 父子模塊的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Java實(shí)現(xiàn)特定范圍的完數(shù)輸出算法示例
這篇文章主要介紹了Java實(shí)現(xiàn)特定范圍的完數(shù)輸出算法,簡單說明了完數(shù)的概念、計(jì)算原理并結(jié)合實(shí)例形式分析了java針對給定范圍內(nèi)的完數(shù)輸出操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12
Spring中校驗(yàn)器(Validator)的深入講解
Spring校驗(yàn)器,參數(shù)校驗(yàn)從此簡單。下面這篇文章主要給大家介紹了關(guān)于Spring中校驗(yàn)器(Validator)的相關(guān)資料,文中通過示例代碼介紹非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06

