java解压和压缩zip文件

1.导入jar包
在pom文件中增加如下:

   <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>1.15</version>

        </dependency>

2.建立一个utils专门处理解压和压缩这类文件

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.zip.Zip64Mode;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
public class ZipUtils {
    /**
     * zip压缩文件
     * @param dir
     * @param zippath
     */  
    public static void zip(String dir ,String zippath){  
        List<String> paths = getFiles(dir);   
        compressFilesZip(paths.toArray(new String[paths.size()]),zippath,dir    );  
    }  
    /**
     * 递归取到当前目录所有文件
     * @param dir
     * @return
     */  
    public static List<String> getFiles(String dir){  
        List<String> lstFiles = null;       
        if(lstFiles == null){  
            lstFiles = new ArrayList<String>();  
        }  
        File file = new File(dir);  
        File [] files = file.listFiles();   
        for(File f : files){  
            if(f.isDirectory()){  
                lstFiles.add(f.getAbsolutePath());  
                lstFiles.addAll(getFiles(f.getAbsolutePath()));  
            }else{   
                String str =f.getAbsolutePath();  
                lstFiles.add(str);  
            }  
        }  
        return lstFiles;  
    }  

    /**
     * 文件名处理
     * @param dir
     * @param path
     * @return
     */  
    public static String getFilePathName(String dir,String path){  
        String p = path.replace(dir+File.separator, "");  
        p = p.replace("\\", "/");  
        return p;  
    }  
    /**
     * 把文件压缩成zip格式
     * @param files         需要压缩的文件
     * @param zipFilePath 压缩后的zip文件路径   ,如"D:/test/aa.zip";
     */  
    public static void compressFilesZip(String[] files,String zipFilePath,String dir) {  
        if(files == null || files.length <= 0) {  
            return ;  
        }  
        ZipArchiveOutputStream zaos = null;  
        try {  
            File zipFile = new File(zipFilePath);  
            zaos = new ZipArchiveOutputStream(zipFile);  
            zaos.setUseZip64(Zip64Mode.AsNeeded);  
            //将每个文件用ZipArchiveEntry封装  
            //再用ZipArchiveOutputStream写到压缩文件中  
            for(String strfile : files) {  
                File file = new File(strfile);  
                if(file != null) {  
                    String name = getFilePathName(dir,strfile);  
                    ZipArchiveEntry zipArchiveEntry  = new ZipArchiveEntry(file,name);  
                    zaos.putArchiveEntry(zipArchiveEntry);  
                    if(file.isDirectory()){  
                        continue;  
                    }  
                    InputStream is = null;  
                    try {  
                        is = new BufferedInputStream(new FileInputStream(file));  
                        byte[] buffer = new byte[1024 ];   
                        int len = -1;  
                        while((len = is.read(buffer)) != -1) {  
                            //把缓冲区的字节写入到ZipArchiveEntry  
                            zaos.write(buffer, 0, len);  
                        }  
                        zaos.closeArchiveEntry();   
                    }catch(Exception e) {  
                        throw new RuntimeException(e);  
                    }finally {  
                        if(is != null)  
                            is.close();  
                    }  

                }  
            }  
            zaos.finish();  
        }catch(Exception e){  
            throw new RuntimeException(e);  
        }finally {  
                try {  
                    if(zaos != null) {  
                        zaos.close();  
                    }  
                } catch (IOException e) {  
                    throw new RuntimeException(e);  
                }  
        }  

    }  


    /**
    * 把zip文件解压到指定的文件夹
    * @param zipFilePath zip文件路径, 如 "D:/test/aa.zip"
    * @param saveFileDir 解压后的文件存放路径, 如"D:/test/" ()
    */  
    public static void unzip(String zipFilePath, String saveFileDir) {  
        if(!saveFileDir.endsWith("\\") && !saveFileDir.endsWith("/") ){  
            saveFileDir += File.separator;  
        }  
        File dir = new File(saveFileDir);  
        if(!dir.exists()){  
            dir.mkdirs();  
        }  
        File file = new File(zipFilePath);  
        if (file.exists()) {  
            InputStream is = null;   
            ZipArchiveInputStream zais = null;  
            try {  
                is = new FileInputStream(file);  
                zais = new ZipArchiveInputStream(is);  
                ArchiveEntry archiveEntry = null;  
                while ((archiveEntry = zais.getNextEntry()) != null) {   
                    // 获取文件名  
                    String entryFileName = archiveEntry.getName();  
                    // 构造解压出来的文件存放路径  
                    String entryFilePath = saveFileDir + entryFileName;  
                    OutputStream os = null;  
                    try {  
                        // 把解压出来的文件写到指定路径  
                        File entryFile = new File(entryFilePath);  
                        if(entryFileName.endsWith("/")){  
                            entryFile.mkdirs();  
                        }else{  
                            os = new BufferedOutputStream(new FileOutputStream(  
                                    entryFile));                              
                            byte[] buffer = new byte[1024 ];   
                            int len = -1;   
                            while((len = zais.read(buffer)) != -1) {  
                                os.write(buffer, 0, len);   
                            }  
                        }  
                    } catch (IOException e) {  
                        throw new IOException(e);  
                    } finally {  
                        if (os != null) {  
                            os.flush();  
                            os.close();  
                        }  
                    }  

                }   
            } catch (Exception e) {  
                throw new RuntimeException(e);  
            } finally {  
                try {  
                    if (zais != null) {  
                        zais.close();  
                    }  
                    if (is != null) {  
                        is.close();  
                    }  
                } catch (IOException e) {  
                    throw new RuntimeException(e);  
                }  
            }  
        }  
    }  
}

使用上面这个类,就基本上能够全部完成了。
3.使用方法

private void toPutJSCSS(Long template_id,Integer material_id) {
        String catalog = material_id+"";
        String saveFileDir = materialHtml+"/"+catalog;
        String zipFilePath = templatePath+template_id+".zip";
        ZipUtils.unzip(zipFilePath, saveFileDir);
    }

把各种地址和文件命名传进去就可以了~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值