java實(shí)現(xiàn)文件夾解壓和壓縮
本文實(shí)例為大家分享了java實(shí)現(xiàn)文件夾解壓和壓縮的具體代碼,供大家參考,具體內(nèi)容如下
效果
實(shí)現(xiàn)多個(gè)文件以及文件夾的壓縮和解壓
代碼分析
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; public class Main { public static void main(String[] args) throws IOException { //解決中文亂碼 //壓縮 參數(shù)改成你自己的源文件路徑和壓縮后的文件路徑 //yasuo("C:\\file\\", "C:\\file.zip"); //解壓 參數(shù)改成你自己的源文件路徑和解壓后的文件路徑 jieya("C:\\file.zip", "C:\\file\\"); } public static void jieya(String zipPath, String path) throws IOException, FileNotFoundException { //創(chuàng)建解壓后的文件夾 File pt=new File(path.substring(0,path.length()-1)); if(!pt.exists()) { pt.mkdirs(); } //try(resource)來(lái)保證InputStream正確關(guān)閉 try(ZipInputStream zip=new ZipInputStream(new FileInputStream(zipPath))){ //ZipEntry表示一個(gè)壓縮文件或目錄 ZipEntry entry; while((entry=zip.getNextEntry())!=null) { String name=entry.getName(); //壓縮文件 if(!(entry.getName().contains(File.separator))) { FileOutputStream file= new FileOutputStream( path+ name); int n=0; while((n=zip.read())!=-1) { file.write(n); } }else { //目錄 int index=name.lastIndexOf("\\"); File file= new File(path+ name.substring(0,index)); if(!file.exists()) { file.mkdirs(); } //如果不是空目錄 if(index!=name.length()-1) { FileOutputStream f= new FileOutputStream( path+ name); int n=0; while((n=zip.read())!=-1) { f.write(n); } } } } zip.closeEntry(); } } public static void yasuo(String path, String zipPath) throws IOException, FileNotFoundException { File zp=new File(zipPath); if(!zp.exists()) { zp.createNewFile(); } try(ZipOutputStream zip=new ZipOutputStream(new FileOutputStream(zp))) { File files= new File(path); File[] f=files.listFiles(); for (File file : f) { zipAll(zip, file,file.getName()); } } } public static void zipAll(ZipOutputStream zip, File files,String name) throws IOException, FileNotFoundException { if(files.isDirectory()) { File[] files2=files.listFiles(); if(files2.length==0||files2==null) { zip.putNextEntry(new ZipEntry(name+File.separator)); }else{ for (File file2 : files2) { if(file2.isFile()) { zip.putNextEntry(new ZipEntry(name+File.separator+file2.getName())); int n; FileInputStream input=new FileInputStream(file2); while((n=input.read())!=-1) { zip.write(n); } } else { zipAll(zip,file2,name+File.separator+file2.getName()); } } } }else { zip.putNextEntry(new ZipEntry(name)); int n; FileInputStream input=new FileInputStream(files); while ((n=input.read())!=-1) { zip.write(n); } } } }
小結(jié)
壓縮
ZipOutputStream可以把多份數(shù)據(jù)寫(xiě)入zip包;
解壓
ZipInputStream可以讀取zip格式的流;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java數(shù)據(jù)脫敏實(shí)現(xiàn)的方法總結(jié)
數(shù)據(jù)脫敏,指的是對(duì)某些敏感信息通過(guò)脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實(shí)現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù),本文主要是對(duì)后端數(shù)據(jù)脫敏實(shí)現(xiàn)的簡(jiǎn)單總結(jié),希望對(duì)大家有所幫助2023-07-07Java中替代equals,compareTo和toString的方法
這篇文章主要介紹了Java中替代equals,compareTo和toString的方法,文中代碼十分詳細(xì),幫助大家更好的理解的學(xué)習(xí),感興趣的朋友可以了解下2020-06-06Spring使用三級(jí)緩存解決循環(huán)依賴(lài)的問(wèn)題
本文給大家分享Spring使用三級(jí)緩存解決循環(huán)依賴(lài)的問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-06-06大數(shù)組元素差異removeAll與Map效率對(duì)比
這篇文章主要介紹了大數(shù)組元素差異removeAll與Map效率對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03淺談java二進(jìn)制、十進(jìn)制、十六進(jìn)制、字符串之間的相互轉(zhuǎn)換
下面小編就為大家?guī)?lái)一篇淺談二進(jìn)制、十進(jìn)制、十六進(jìn)制、字符串之間的相互轉(zhuǎn)換。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧2016-06-06解決springboot的aop切面不起作用問(wèn)題(失效的排查)
這篇文章主要介紹了解決springboot的aop切面不起作用問(wèn)題(失效的排查),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。 一起跟隨小編過(guò)來(lái)看看吧2020-04-04java jackson 將對(duì)象轉(zhuǎn)json時(shí),忽略子對(duì)象的某個(gè)屬性操作
這篇文章主要介紹了java jackson 將對(duì)象轉(zhuǎn)json時(shí),忽略子對(duì)象的某個(gè)屬性操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10java對(duì)象數(shù)組實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java對(duì)象數(shù)組實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06java編程中實(shí)現(xiàn)調(diào)用js方法分析
這篇文章主要介紹了java編程中實(shí)現(xiàn)調(diào)用js方法,結(jié)合具體實(shí)例形式較為詳細(xì)的分析了java編程中調(diào)用js方法的常用操作技巧與注意事項(xiàng),需要的朋友可以參考下2017-09-09