zoukankan      html  css  js  c++  java
  • ZIP4J---ZIP文件压缩与解压缩学习

    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;
    	}
    
    }
    
  • 相关阅读:
    如何在HTML5 图片预览
    js本地图片预览代码兼容所有浏览器
    c#无损高质量压缩图片
    c#如何在win7下设置IE代理的完美解决方案
    关于Android 访问权限设置
    在asp.net mvc中将checkbox传到后台时总是true的解决方法
    IO流
    Map集合重要练习
    Map笔记总结
    泛型笔记
  • 原文地址:https://www.cnblogs.com/hoge/p/6198491.html
Copyright © 2011-2022 走看看