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;
    	}
    
    }
    
  • 相关阅读:
    【前端开发】关于闭包最通俗易懂的解释 for循环,定时器,闭包混合一块的那点事。
    【前端node开发】你需要的Express开发教程
    【前端vue开发】vue开发输入姓名,电话,公司表单提交组件
    【前端vue开发】vue知识点超链接学习笔记
    【前端vue开发】vue子调父 $emit (把子组件的数据传给父组件)
    【前端vue开发】vue项目使用sass less扩展语言所要安装的依赖
    【轨迹动画css】不规则轨迹动画css教程,弹球,客服广告悬浮层都可以用
    【前端vue开发架构】vue开发单页项目架构总结
    3D全景漫游
    一些好的网站
  • 原文地址:https://www.cnblogs.com/hoge/p/6198491.html
Copyright © 2011-2022 走看看