参考 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;
}
}