package com.wbh.common.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import org.apache.log4j.Logger; import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.util.Zip4jConstants; public class ZipUtils { /** log日志 */ private static final Logger logger = Logger.getLogger(ZipUtils.class); /* * 将一个路径下的文件打zip * * @folderToAdd 文件路径 * * @targetZipFilePath zip文件存放路径 */ public String zipForder(String folderToAdd, String targetZipFilePath) { String result = null; if (FileHelper.isExistsFile(targetZipFilePath) || FileHelper.isExistsFolder(folderToAdd) == false) { return result; } try { ZipFile zipFile = new ZipFile(targetZipFilePath); ZipParameters parameters = new ZipParameters(); parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); zipFile.addFolder(folderToAdd, parameters); result = targetZipFilePath; } catch (ZipException e) { e.printStackTrace(); logger.error(e.getMessage()); } return result; } /* * 将一个路径下的文件打zip * * @folderToAdd 文件路径 * * @targetZipFilePath zip文件存放路径 * * @password 解压密码 */ public String zipForder(String folderToAdd, String targetZipFilePath,String targetFileName, String password) { String result = null; try { if (FileHelper.isExistsFile(targetZipFilePath+targetFileName) || FileHelper.isExistsFolder(folderToAdd) == false) { return result; } if (FileHelper.isExistsFolder(targetZipFilePath) == false) { FileHelper.createFolder(targetZipFilePath); } } catch (Exception e) { } try { ZipFile zipFile = new ZipFile(targetZipFilePath+targetFileName); ZipParameters parameters = new ZipParameters(); parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 加密设置 parameters.setEncryptFiles(true); parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); parameters.setPassword(password); zipFile.addFolder(folderToAdd, parameters); result = targetZipFilePath; } catch (ZipException e) { e.printStackTrace(); logger.error(e.getMessage()); } return result; } /* * 将一个文件流打zip * * @is 文件流 * * @sourcefilePath 对应文件流的文件名(全路径) * * @targetZipFilePath zip文件存放路径 * * @fileNameInZip zip文件中文件的命名 */ public String AddStreamToZip(InputStream is, String sourcefilePath, String targetZipFilePath, String fileNameInZip) { String result = null; try { ZipFile zipFile = new ZipFile(targetZipFilePath); ZipParameters parameters = new ZipParameters(); parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); parameters.setFileNameInZip(fileNameInZip); parameters.setSourceExternalStream(true); is = new FileInputStream(sourcefilePath); zipFile.addStream(is, parameters); result = targetZipFilePath; } catch (Exception e) { e.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } /* * 将多个文件打zip * * @filesToAdd 文件集合 * * @targetZipFilePath zip文件存放路径 * * @password 解压密码 */ public String zipFiles(ArrayList<File> filesToAdd, String targetZipFilePath, String password) { String result = null; if (FileHelper.isExistsFile(targetZipFilePath)) { return result; } for (int i = 0; i < filesToAdd.size(); i++) { if (filesToAdd.get(i).exists() == false) { // 有不存在的文件就退出 return result; } } try { ZipFile zipFile = new ZipFile(targetZipFilePath); zipFile.setFileNameCharset("GBK"); ZipParameters parameters = new ZipParameters(); parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); parameters.setEncryptFiles(true); parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); parameters.setPassword(password); zipFile.addFiles(filesToAdd, parameters); result = targetZipFilePath; } catch (ZipException e) { e.printStackTrace(); logger.error(e.getMessage()); } return result; } /* * 解压zip * * @zipFilePath zip文件存放路径 * * @unZipFilePath 解压zip文件存放路径 * * @password 解压密码 */ public String ExtractAllFiles(String zipFilePath,String unZipFilePath, String password) { String result = null; if (FileHelper.isExistsFile(zipFilePath)) { return result; } try { ZipFile zipFile = new ZipFile(zipFilePath); if (zipFile.isEncrypted()) { // if yes, then set the password for the zip file zipFile.setPassword(password); } zipFile.extractAll(unZipFilePath); } catch (ZipException e) { e.printStackTrace(); logger.error(e.getMessage()); } return result; } }