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)來保證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ù)寫入zip包;
解壓
ZipInputStream可以讀取zip格式的流;
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中@DateTimeFormat @JsonFormat失效原因及測試填坑
本文主要介紹了Java中@DateTimeFormat @JsonFormat失效原因及測試填坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
org.apache.ibatis.annotations不存在的問題
這篇文章主要介紹了org.apache.ibatis.annotations不存在的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
java中實(shí)現(xiàn)漢字按照拼音排序(示例代碼)
這篇文章主要是對(duì)java中將漢字按照拼音排序的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12
JavaWeb實(shí)現(xiàn)同一帳號(hào)同一時(shí)間只能一個(gè)地點(diǎn)登陸(類似QQ登錄的功能)
最近做了企業(yè)項(xiàng)目,其中有這樣的需求要求同一帳號(hào)同一時(shí)間只能一個(gè)地點(diǎn)登陸類似QQ登錄的功能。下面小編通過本文給大家分享實(shí)現(xiàn)思路,感興趣的朋友參考下吧2016-11-11
Java的項(xiàng)目構(gòu)建工具M(jìn)aven的配置和使用教程
Maven是Java世界中的項(xiàng)目管理和構(gòu)建自動(dòng)化工具,基于POM項(xiàng)目對(duì)象模型的思想,下面我們就具體來看一下具體的Java的項(xiàng)目構(gòu)建工具M(jìn)aven的配置和使用教程:2016-05-05

