zip4j之加压解压
Posted learcher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zip4j之加压解压相关的知识,希望对你有一定的参考价值。
最近看同事搞个文件打包,搞了大半天,还是有问题!嗨~~
网上明明有现成的,偏偏要自己写!
下面是基于zip4j实现加压解决的简单工具类
package com.learcher.zip; import java.io.File; import java.util.List; 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; /** * @Code<code>ZipUtils</code> * @Comments * <p>在线加压zip与解压zip</p> * <p>依赖第三方jar包:zip4j_1.3.2.jar</p> * <p>jar 来源:http://maven.outofmemory.cn/net.lingala.zip4j/zip4j/1.3.2/ * @CreateDate 2017-10-14 下午3:23:02 * @author learcher * @modifyDate * @modifier * @version 1.0a * @since jdk1.6 */ public class ZipUtils { /** * 解压密码 */ private static String PASSWORD=""; public static void main(String[] args) throws ZipException { String zipFromFile = "E:/temp/tmp/需要压缩的文件或目录"; String zipToFile = "E:/temp/tmp/压缩后的文件地址.zip"; // 压缩文件夹或文件到指定目录下 ZipUtils.zip(zipFromFile, zipToFile); // ZipUtils.zip(zipFromFile, zipToFile, true); // ZipUtils.zip(zipFromFile, zipToFile, "password"); String unZipFromFile = "E:/temp/tmp/需要加压文件.zip"; String unZipToPath = "E:/temp/tmp/加压后存放目录"; // 解压文件到指定目录 // ZipUtils.unZip(unZipFromFile); // ZipUtils.unZip(unZipFromFile, unZipToPath); // ZipUtils.unZip(unZipFromFile, unZipToPath, "password"); } /** * @createDate:2017-10-14 下午4:50:03 * @author: learcher * @Description: * <p>加压ZIP文件</p> * @param fromFile -> 需要加压的ZIP文件地址 */ public static void unZip(String fromFile){ File file = new File(fromFile); doUnZip(file, file.getParent()); } /** * @createDate:2017-10-14 下午4:50:55 * @author: learcher * @Description: * <p>加压ZIP文件</p> * @param fromFile -> 需要加压的ZIP文件地址 * @param toPath -> 加压后的文件存放地址 */ public static void unZip(String fromFile, String toPath){ if (toPath == null || "".equals(toPath.trim())){ unZip(fromFile); }else{ doUnZip(new File(fromFile), toPath); } } /** * @createDate:2017-10-14 下午4:51:17 * @author: learcher * @Description: * <p>加压ZIP文件</p> * @param fromFile -> 需要加压的ZIP文件地址 * @param toPath -> 加压后的文件存放地址 * @param Password -> 解压密码 */ public static void unZip(String fromFile, String toPath, String Password) { PASSWORD = Password; unZip(fromFile, toPath); } /** * @createDate:2017-10-14 下午4:48:00 * @author: learcher * @Description: * <p>解压ZIP文件</p> * @param fromFile -> 需要加压 的zip文件 * @param toPath -> 加压后存放的目录 */ private static void doUnZip(File fromFile, String toPath){ try{ ZipFile zipFile = new ZipFile(fromFile); zipFile.setFileNameCharset("GBK"); if (!zipFile.isValidZipFile()) { throw new ZipException("文件不合法或不存在!"); } checkEncrypted(zipFile); List<FileHeader> fileHeaderList = zipFile.getFileHeaders(); for (int i = 0; i < fileHeaderList.size(); i++) { FileHeader fileHeader = fileHeaderList.get(i); zipFile.extractFile(fileHeader, toPath); } }catch (Exception e) { e.printStackTrace(); } } /** * @createDate:2017-10-14 下午4:15:36 * @author: learcher * @Description: * <p>检查加压是否需要密码</p> */ private static void checkEncrypted(ZipFile zip) throws ZipException { if (zip.isEncrypted()) { zip.setPassword(PASSWORD); } } /** * @createDate 2017-10-14 下午5:36:17 * @author learcher * @Description * <p>把文件fromFile压缩为toFile</p> * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径) * @param toFile -> 压缩后的文件(完整路径) */ public static void zip(String fromFile, String toFile){ zip(fromFile, toFile, true); } /** * @createDate 2017-10-14 下午5:36:17 * @author learcher * @Description * <p>把文件fromFile压缩为toFile</p> * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径) * @param toFile -> 压缩后的文件(完整路径) * @param password -> 设置解密密码,注:该密码最对文件控制 */ public static void zip(String fromFile, String toFile, String password){ PASSWORD = password; zip(fromFile, toFile, true); } /** * @createDate 2017-10-14 下午5:36:17 * @author learcher * @Description * <p>把文件fromFile压缩为toFile</p> * <p>注:如果不覆盖,则会继续将新文件写入原有的zip包中</p> * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径) * @param toFile -> 压缩后的文件(完整路径) * @param cover -> 是否覆盖原有文件,true=覆盖 */ public static void zip(String fromFile, String toFile, boolean cover){ File zipFile = new File(toFile); if (!zipFile.getParentFile().exists()) { zipFile.getParentFile().mkdirs(); } if (zipFile.exists() && cover) { zipFile.delete(); // 覆盖原有 文件 } doZip(new File(fromFile), toFile); } /** * @createDate 2017-10-14 下午5:33:44 * @author learcher * @Description * <p>把文件fromFile压缩为toFile</p> * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径) * @param toFile -> 压缩后的文件(完整路径) */ private static void doZip(File fromFile, String toFile){ try { ZipFile zip=new ZipFile(toFile); zip.setFileNameCharset("GBK"); ZipParameters param = new ZipParameters(); // 设置压缩方式(默认方式) param.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // 设置压缩级别 param.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); setupPassword(param); if (fromFile.isFile()){ zip.addFile(fromFile, param); }else{ zip.addFolder(fromFile, param); } } catch (ZipException e) { e.printStackTrace(); } } /** * @createDate:2017-10-14 下午5:13:41 * @author: learcher * @Description: * <p>设置解压密码</p> * @param param -> ZipParameters 参数对象 */ private static void setupPassword(ZipParameters param) { if (PASSWORD != null && !"".equals(PASSWORD.trim())){ // 设置加密文件 param.setEncryptFiles(true); // 设置加密方式(必须要有加密算法) param.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); // 设置秘钥长度 param.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); param.setPassword(PASSWORD); } } }
更多信息可以去查看:http://blog.csdn.net/u011165335/article/details/50496930
以上是关于zip4j之加压解压的主要内容,如果未能解决你的问题,请参考以下文章
zip4j 2.x使用,Java实现文件压缩与解压,加密压缩,ZipParameters ZipFile使用