hoge66的专栏

-----------------------看到专栏,偷着笑!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ZIP4J---ZIP文件压缩与解压缩学习

Posted on 2016-12-19 18:01  hehoge  阅读(348)  评论(0编辑  收藏  举报
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;
	}

}