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") ;
}
}
}
网友评论