Zip4j开源jar包的简单使用

package com.fenghao.zip;

import java.io.File;

import java.util.ArrayList;

import java.util.Collections;

import net.lingala.zip4j.core.ZipFile;

import net.lingala.zip4j.exception.ZipException;

import net.lingala.zip4j.model.ZipParameters;

import net.lingala.zip4j.util.Zip4jConstants;

/**

* 对文件进行压缩和加密

* 对文件进行解压和解密

* @author fenghao

*

*/

public class CompressUtils {

    /**

    * 解压加密的压缩文件

    * @param zipfile

    * @param dest

    * @param passwd

    * @throws ZipException

    */

    public void unZip(File zipfile,String dest,String passwd) throws ZipException{

        ZipFile zfile=new ZipFile(zipfile);

//        zfile.setFileNameCharset("GBK");//在GBK系统中需要设置

        if(!zfile.isValidZipFile()){

            throw new ZipException("压缩文件不合法,可能已经损坏!");

        }

        File file=new File(dest);

        if(file.isDirectory() && !file.exists()){

            file.mkdirs();

        }

        if(zfile.isEncrypted()){

            zfile.setPassword(passwd.toCharArray());

        }

        zfile.extractAll(dest);

    }

    /**

    * 压缩文件且加密

    * @param src

    * @param dest

    * @param is

    * @param passwd

    */

    public void zip(String src,String dest,boolean is,String passwd){

        File srcfile=new File(src);

        //创建目标文件

        String destname = buildDestFileName(srcfile, dest);

        ZipParameters par=new ZipParameters();

        par.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);

        par.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);

        if(passwd!=null){

            par.setEncryptFiles(true);

            par.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);

            par.setPassword(passwd.toCharArray());

        }

        try {

            ZipFile zipfile=new ZipFile(destname);

            if(srcfile.isDirectory()){

                if(!is){

                    File[] listFiles = srcfile.listFiles();

                    ArrayList<File> temp=new ArrayList<File>();

                    Collections.addAll(temp, listFiles);

                    zipfile.addFiles(temp, par);

                }

                zipfile.addFolder(srcfile, par);

            }else{

                zipfile.addFile(srcfile, par);

            }

        } catch (ZipException e) {

            e.printStackTrace();

        }



    }

    /**

    * 目标文件名称

    * @param srcfile

    * @param dest

    * @return

    */

    public String buildDestFileName(File srcfile,String dest){

        if(dest==null){//没有给出目标路径时

            if(srcfile.isDirectory()){

                dest=srcfile.getParent()+File.separator+srcfile.getName()+".zip";

            }else{

                String filename=srcfile.getName().substring(0,srcfile.getName().lastIndexOf("."));

                dest=srcfile.getParent()+File.separator+filename+".zip";

            }

        }else{

            createPath(dest);//路径的创建

            if(dest.endsWith(File.separator)){

                String filename="";

                if(srcfile.isDirectory()){

                    filename=srcfile.getName();

                }else{

                    filename=srcfile.getName().substring(0, srcfile.getName().lastIndexOf("."));

                }

                dest+=filename+".zip";

            }

        }

        return dest;

    }

    /**

    * 路径创建

    * @param dest

    */

    private void createPath(String dest){

        File destDir=null;

        if(dest.endsWith(File.separator)){

            destDir=new File(dest);//给出的是路径时

        }else{

            destDir=new File(dest.substring(0,dest.lastIndexOf(File.separator)));

        }

        if(!destDir.exists()){

            destDir.mkdirs();

        }

    }


  @org.junit.Test

  public void Test(){

      String src="/home/fenghao/document/书籍类资料/Maven实战 高清扫描完整版.pdf";

      String dest="/home/fenghao/zip/maven/123.zip";

      zip(src, dest, true, "123456");

  }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容