美文网首页
java 压缩/解压缩zip文件-带密码

java 压缩/解压缩zip文件-带密码

作者: heichong | 来源:发表于2019-04-15 13:40 被阅读0次
    package com.ctitc.ibassess.util;
    
    import java.io.File;
    import java.util.ArrayList;
    
    import net.lingala.zip4j.core.ZipFile;
    import net.lingala.zip4j.model.ZipParameters;
    import net.lingala.zip4j.util.Zip4jConstants;
    
    /**
     * Zip文件工具类
     * @author zongb
     */
    public class FileEncryptCompressUtils {
         
        public static void main(String []args){
            String password = "12";
            File file  = new File("C:\\test\\myzip") ;
            try {
    //          compressFiles2Zip(file.listFiles(),"C:\\test\\myzip.zip",password);
                decompressZip("C:\\test\\myzip.zip","C:\\test\\test2", password);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        /**
         * 把文件压缩成zip格式,支持文件夹和文件混合压缩
         * @param files        需要压缩的文件或文件夹
         * @param zipFileName 压缩后的zip文件路径   ,如"D:/test/aa.zip";
         * @param password 密码
         */
        public static boolean compressFiles2Zip(File[] files,String zipFileName,String password) throws Exception {
            boolean result = false ;
            if(files == null || files.length ==0 || zipFileName==null || !isEndsWithZip(zipFileName)) {
                return result ;
            }
            
            
            ZipFile zipFile = new ZipFile(zipFileName);
            ZipParameters parameters = new ZipParameters();  
            parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);  
            parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
    
            //设置密码
            parameters.setEncryptFiles(true);  
            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);   
            parameters.setPassword(password);  
            
            
            ArrayList<File> fileList = new ArrayList<File>();
            for(File file:files){
                if(file.isDirectory()){
                    //如果是文件夹的话
                    zipFile.addFolder(file, parameters);
                }else{
                    //文件的话,最后一起添加
                    fileList.add(file);
                }
            }
            //添加所有文件
            zipFile.addFiles(fileList, parameters);
            
            return true ;
        }
        
        /**
         * 把zip文件解压到指定的文件夹
         * @param zipFilePath   zip文件路径, 如 "D:/test/aa.zip"
         * @param saveFileDir   解压后的文件存放路径, 如"D:/test/"
         * @param password   解压密码
         * @throws Exception 
         */
        public static void decompressZip(String zipFilePath,String saveFileDir,String password) throws Exception {
            if(!isEndsWithZip(zipFilePath)) {
               return ;
            }
            
            ZipFile zipFile = new ZipFile(zipFilePath);        
            if (zipFile.isEncrypted()) {
                zipFile.setPassword(password);
            }
            zipFile.extractAll(saveFileDir);
        }
         
        /**
         * 判断文件名是否以.zip为后缀
         * @param fileName        需要判断的文件名
         * @return 是zip文件返回true,否则返回false
         */
        public static boolean isEndsWithZip(String fileName) {
            if(fileName == null || fileName.length() < 4) {
                return false ;
            }else{
                return fileName.toUpperCase().endsWith(".ZIP") ;
            }
        }
         
    }
    

    相关文章

      网友评论

          本文标题:java 压缩/解压缩zip文件-带密码

          本文链接:https://www.haomeiwen.com/subject/amduwqtx.html