首页 > 代码库 > zip4j 压缩

zip4j 压缩


/***
*@author liguang
*压缩文件
*/
public class AddFilesWithAESEncryption {

/**
* addFilesWithAESEncryption - 带密码的文件压缩
* @param doZipFile - 最终压缩后形成的文件及路径
* @param ArrayList<File> filesToAdd - 需要进行压缩的文件支持多文件压缩
* @param password 设置密码 密码如果为空 压缩时则不进行设置密码
*
* public static final int STATE_READY = 0;
public static final int STATE_BUSY = 1;
public static final int RESULT_SUCCESS = 0;
public static final int OPERATION_ADD = 0;
**/
public static int addFilesWithAESEncryption(String doZipFile ,ArrayList<File> filesToAdd , String password) {
int reuslt = 1;
ZipFile zipFile = null;
try {
zipFile =new ZipFile(doZipFile);
System.out.println("---------------------------压缩开始-------------------------------");

if(zipFile.getFile().exists()){
System.out.println("文件已存在先删除压缩包!");
zipFile.getFile().delete();
}
zipFile.setRunInThread(true);

ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); //压缩模式
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); //压缩程度 一般压缩

if(!"".equals(password)){
parameters.setEncryptFiles(true); //是否设置密码
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
parameters.setPassword(password);//设置压缩密码
}
//添加要压缩的文件 可以支持多文件压缩,并 开始 压缩;
zipFile.addFiles(filesToAdd, parameters);

//一下 为 监听过程,不影响 实际压缩过程;
ProgressMonitor progressMonitor = zipFile.getProgressMonitor();//开启压缩监听

//开启 监听后,压缩状态 为 1:正在压缩
//若 存在异常 ,则 直接跳出 循环;且状态 结果码 为失败 状态 2;
while (progressMonitor.getState() == ProgressMonitor.STATE_BUSY) {
System.out.println("状态"+progressMonitor.getState());
switch (progressMonitor.getCurrentOperation()) {
case ProgressMonitor.OPERATION_NONE:
// System.out.println("没有正在执行操作");
break;
case ProgressMonitor.OPERATION_ADD:
// System.out.println("添加操作");
break;
case ProgressMonitor.OPERATION_EXTRACT:
// System.out.println("提取操作");
break;
case ProgressMonitor.OPERATION_REMOVE:
// System.out.println("删除操作");
break;
case ProgressMonitor.OPERATION_CALC_CRC:
// System.out.println("Calcualting CRC");
break;
case ProgressMonitor.OPERATION_MERGE:
// System.out.println("合并操作");
break;
default:
// System.out.println("无效的操作");
break;
}

}
//如果 正常压缩,则结果码:为0; 异常则为2 或者其他;
System.out.println("Result: " + progressMonitor.getResult());
reuslt = progressMonitor.getResult();

if (progressMonitor.getResult() == ProgressMonitor.RESULT_ERROR) {
if (progressMonitor.getException() != null) {
progressMonitor.getException().printStackTrace();
} else {
System.err.println("压缩时出现异常");
}
}
System.out.println("---------------------------压缩结束-------------------------------");
//如果 压缩 不成功 ,则 删除 该文件
if(progressMonitor.getResult()!=0){
zipFile.getFile().delete();
}
return reuslt;
} catch (ZipException e) {
//异常状态下 删除 该zip文件
zipFile.getFile().delete();
e.printStackTrace();
return 1;
}
}

public static void main(String[] args) {
//System.out.println((Math.random()*1000+"").substring(0,3));

String doZipFile = "C:\\Users\\Administrator\\Desktop\\ETC\\"+(Math.random()*1000+"").substring(0,3)+"ck20141025-28.zip";

ArrayList<File> filesToAdd = new ArrayList<File>();
filesToAdd.add(new File("C:\\Users\\Administrator\\Desktop\\ETC\\ck20141025-281111"));
// filesToAdd.add(new File("C:\\Users\\Administrator\\Desktop\\四川省高速公路联网收费数据规格及表结构设计说明书(参数表).xls"));
// filesToAdd.add(new File("C:\\Users\\Administrator\\Desktop\\ExtractAllFiles.java"));
String password = "123";
int reuslt = addFilesWithAESEncryption(doZipFile,filesToAdd,password);// 返回 0-已操作完成 1-出现异常 2:输入文件 不存在

System.out.println("完成结果:" + reuslt);
}
}

zip4j 压缩