当前位置:编程学习 > JAVA >>

扩展zip4j内存加密压缩包

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.io.ZipOutputStream;
import net.lingala.zip4j.model.ZipModel;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
import net.lingala.zip4j.zip.ZipEngine;
 
public class Test extends ZipEngine{
    private ZipModel zipModel;
    
    
    public Test(ZipModel zipModel) throws ZipException {        
        super(zipModel);
        this.zipModel=zipModel;
    }
 
    /**
     * @param args
     */
    public static void main(String[] args) {        
        TestSendAttatch att=null;        
        try {
            att = new TestSendAttatch(new ZipModel());
            att.doZipEnc();
            System.out.println("成功");
        } catch (Exception e) {
            System.out.println("失败");
            e.printStackTrace();
        }
    }
 
    public void doZipEnc() {        
        try {
            //将压缩流写到内存
            ByteArrayOutputStream saos = new ByteArrayOutputStream();
            //本地测试
            FileOutputStream f = new FileOutputStream("d:\\test1.zip" ,true);            
            
            for(int i=0;i<1;i++){                
                String passwd = "111";
                ZipParameters parameters = new ZipParameters();
                parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // 压缩方式
                parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 压缩级别
                parameters.setSourceExternalStream(true);
                parameters.setFileNameInZip("aaaa_"+i+".xls");//后缀可以更改的
                if (!"".equals(passwd)) {
                    parameters.setEncryptFiles(true);
                    parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); // 加密方式
                    parameters.setPassword(passwd.toCharArray());
                }                
                addNewStreamToZipTmp(saos, parameters);                        
            }            
            saos.writeTo(f);        
            f.close();
            saos.close();
            //文件大小
            System.out.println("size:" +(saos.toByteArray().length/1024));
        } catch (Exception e) {
            e.printStackTrace();
        }        
    }
 
    
    
    public void addNewStreamToZipTmp(ByteArrayOutputStream baos,ZipParameters parameters) throws ZipException {    
                    
        ZipOutputStream outputStream  = null;        
        try {
            outputStream = new ZipOutputStream(baos, this.zipModel);
            if (zipModel.getEndCentralDirRecord() == null) {
                throw new ZipException("invalid end of central directory record");
            }            
            checkParameters(parameters);
            outputStream.putNextEntry(null, parameters);            
            if (!parameters.getFileNameInZip().endsWith("/")
                    && !parameters.getFileNameInZip().endsWith("\\")) {
                for (int i = 0; i < 10; i++) {
                    outputStream.write("ccccccccccccccccccccc".getBytes());
                    outputStream.flush();
                }
            }
            outputStream.closeEntry();
            outputStream.finish();            
        } catch (ZipException e) {
            throw e;
        } catch (Exception e) {
            throw new ZipException(e);
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    
                }
            }
        }
    }
 
    private void checkParameters(
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,