zip4j 1.3.2使用

来源:互联网 发布:into you mac miller 编辑:程序博客网 时间:2024/06/06 13:12

参考 http://blog.csdn.net/djun100/article/details/18007099,http://blog.csdn.net/super_href/article/details/9062261,http://my.oschina.net/luckyi/blog/159606?p=1,

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.FileHeader;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;



public class CompressUtil {
  public static void main(String[] args) {
        CompressUtil compressUtil = new CompressUtil();
        try {
            // compressUtil.zipWithNotFolder("D:\\test\\test中文.zip", "D:\\zip\\test1.pdf","D:\\zip\\jdbc.properties");
//             compressUtil.zipWithFolder("D:\\test\\test中文.zip", "D:\\zip",true,"123456");
            // compressUtil.zipAddFolder("D:\\test\\test中文.zip", "zip1", "D:\\zip\\jdbc.properties");
            // compressUtil.splitZipIntoMultiFiles("D:\\test\\test中文.zip", "D:\\test\\split");
            // compressUtil.unzipAllFiles("D:\\test\\test中文NOp.zip", "D:\\test");
            // compressUtil.unzipSingleFile("D:\\test\\test中文NOp.zip", "D:\\test","zip\\test1.pdf");
            // compressUtil.unzipAllFiles("D:\\test\\test中文123456.zip", "D:\\test");
             compressUtil.getAllFiles("D:\\test\\test中文123456.zip");
             System.out.println("-------------------------");
            compressUtil.removeFolder("D:\\test\\test中文123456.zip", "zip/inner/");
            System.out.println("-------------------------");
            compressUtil.getAllFiles("D:\\test\\test中文123456.zip");


            System.out.println("end!");
        } catch (ZipException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


    public void removeFolder(String srcZipFile, String waitDeleteFolder) throws ZipException {
        ZipFile zipFile = new ZipFile(srcZipFile);
        zipFile.setFileNameCharset(Encoding.GBK.toString());
        if (zipFile.isEncrypted()) {
            zipFile.setPassword("123456".toCharArray());
        }
        FileHeader tempFileHeander = zipFile.getFileHeader(waitDeleteFolder);
        if (tempFileHeander == null) {
            return;
        } else {
            @SuppressWarnings("unchecked")
            List<FileHeader> list = zipFile.getFileHeaders();
            List<String> waitDel=new ArrayList<>();
            for (FileHeader fileHeader : list) {
                // System.out.println(fileHeader.getFileName());
                String fileName = fileHeader.getFileName();
                if (fileName.startsWith(waitDeleteFolder) && (!fileName.equals(waitDeleteFolder))) {
//                    zipFile.removeFile(fileHeader);
//                    zipFile.removeFile(fileName);
                    waitDel.add(fileName);
                }
            }
            for(String fileName:waitDel){
                zipFile.removeFile(fileName);
            }
            zipFile.removeFile(waitDeleteFolder);
        }


    }


    /** 得到zip中包含的文件列表(目录和相对文件路径) */
    public void getAllFiles(String srcFile) throws ZipException {
        ZipFile zipFile = new ZipFile(srcFile);
        zipFile.setFileNameCharset(Encoding.GBK.toString());
        if (zipFile.isEncrypted()) {
            zipFile.setPassword("123456".toCharArray());
        }
        @SuppressWarnings("unchecked")
        List<FileHeader> list = zipFile.getFileHeaders();
        for (FileHeader fileHeader : list) {
            System.out.println(fileHeader.getFileName());
        }
    }


    public void unzipAllFiles(String srcFile, String descFolder) throws ZipException {
        ZipFile zipFile = new ZipFile(srcFile);
        zipFile.setFileNameCharset(Encoding.GBK.toString());
        if (zipFile.isEncrypted()) {
            zipFile.setPassword("123456".toCharArray());
        }
        zipFile.extractAll(descFolder);
    }


    public void unzipSingleFile(String srcFile, String descFolder, String fileName) throws ZipException {
        ZipFile zipFile = new ZipFile(srcFile);
        if (zipFile.isEncrypted()) {
            zipFile.setPassword("123456");
        }
        zipFile.setFileNameCharset(Encoding.GBK.toString());
        zipFile.extractFile(fileName, descFolder);
    }


    /** 注意这种方式,rar不能解压,报错压缩文件损坏 */
    public void splitZipIntoMultiFiles(String srcZipFile, String destFileName) throws ZipException {
        ZipFile zipFile = new ZipFile(destFileName);
        // split length cannot less than minimum allowed split length of 65536 Bytes
        zipFile.createZipFile(new File(srcZipFile),
                getZipPara(Zip4jConstants.COMP_DEFLATE, Zip4jConstants.DEFLATE_LEVEL_NORMAL), false, 65537);
    }


    public void zipAddFolder(String destFile, String folder, String file) throws ZipException {
        ZipFile zipFile = new ZipFile(destFile);
        zipFile.setFileNameCharset(Encoding.GBK.toString());
        ZipParameters zipParameters = getZipPara(Zip4jConstants.COMP_DEFLATE, Zip4jConstants.DEFLATE_LEVEL_NORMAL);
        zipParameters.setRootFolderInZip(folder);
        zipFile.addFile(new File(file), zipParameters);
    }


    /** zip文件若已存在,则添加 */
    public void zipWithFolder(String destFile, String folder, boolean isEncrypt, String passwd) throws ZipException {
        ZipFile zipFile = new ZipFile(destFile);
        zipFile.setFileNameCharset(Encoding.GBK.toString());
        ZipParameters zipParameters = getZipPara(Zip4jConstants.COMP_DEFLATE, Zip4jConstants.DEFLATE_LEVEL_NORMAL);
        if (isEncrypt) {
            zipParameters.setEncryptFiles(true);
            zipParameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); // 加密方式
            zipParameters.setPassword(passwd.toCharArray());
            // zipFile.setPassword("123456");
        }
        zipFile.addFolder(folder, zipParameters);
    }


    /** zip文件若已存在,则添加 */
    public void zipWithNotFolder(String destFile, String... files) throws ZipException {
        ArrayList<File> fileList = new ArrayList<>();
        for (String file : files) {
            fileList.add(new File(file));
        }
        ZipFile zipFile = new ZipFile(destFile);
        zipFile.setFileNameCharset(Encoding.GBK.toString());
        zipFile.addFiles(fileList, getZipPara(Zip4jConstants.COMP_DEFLATE, Zip4jConstants.DEFLATE_LEVEL_NORMAL));
    }


    public ZipParameters getZipPara(int compMethod, int compLevel) {
        ZipParameters zipParameters = new ZipParameters();
        zipParameters.setCompressionMethod(compMethod);
        zipParameters.setCompressionLevel(compLevel);
        return zipParameters;
    }


    private enum Encoding {
        GBK, P123456;
    }
}

0 0
原创粉丝点击