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之加压解压的更多相关文章
- .NET使用ICSharpCode.SharpZipLib压缩/解压文件
SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...
- C#第三方zip解压压缩工具,带事例源码
using System;using System.Collections.Generic;using System.Linq;using System.Text;using ICSharpCode. ...
- C#使用SharpZipLib压缩解压文件
#region 加压解压方法 /// <summary> /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) /// </summary> // ...
- Java_压缩与解压工具类
转载请注明出处:http://blog.csdn.net/y22222ly/article/details/52201675 zip压缩,解压 zip压缩与解压主要依靠java api的两个类: Zi ...
- C# .NET 使用第三方类库DotNetZip解压/压缩Zip文件
dotNetZip on CodePlex: http://dotnetzip.codeplex.com/ 详细的可以看源代码……总之感觉比SharpZipLib好用.而且DotNetZip支持VB, ...
- CSharp tar类型文件压缩与解压
最近闲暇时间开始写点通用基础类在写到tar类型文件压缩与解压时遇到点问题 压缩用的类库我是下载的 SharpZipLib_0860版本 先上代码 加压核心 /// <summary> // ...
- MySQL5.7.25(解压版)Windows下详细的安装过程
大家好,我是浅墨竹染,以下是MySQL5.7.25(解压版)Windows下详细的安装过程 1.首先下载MySQL 推荐去官网上下载MySQL,如果不想找,那么下面就是: Windows32位地址:点 ...
- (转载)C#压缩解压zip 文件
转载之: C#压缩解压zip 文件 - 大气象 - 博客园http://www.cnblogs.com/greatverve/archive/2011/12/27/csharp-zip.html C# ...
- Android多种格式的异步解压/压缩解决方案
前言 最近由于项目需要,需要我谅解一下关于在移动平台的解压功能,在移动平台解压,我个人感觉是没有太大必要的,毕竟手机的性能有限.但是,不口否认,移动端的解压功能又是必备的,因为如果对于一些资源管理器类 ...
随机推荐
- 中间件使用之(UA,IP,selenium)的使用
一.UA池:User-Agent池 - 作用:尽可能多的将scrapy工程中的请求伪装成不同类型的浏览器身份. - 操作流程: 1.在下载中间件中拦截请求 2.将拦截到的请求的请求头信息中的UA进行篡 ...
- VUE-CLI 设置页面title
router > index.js { path: '/worklist', name: 'worklist', component: worklist, meta: {title:'维修工列表 ...
- oracle 基础知识(十一)----表空间结构
一,逻辑结构图 二.tablespace 01,Oracle表空间 它是一个逻辑的概念,它在物理上是不存在的. 02,oracle 存储结构 03.表空间特性 一个数据库可以包含多个表空间,一个表空间 ...
- Git学习手记
直接使用github的客户端即可 1.简介 集中化的版本控制系统( Centralized Version Control Systems,简称 CVCS )应运而生.这类系统,诸如 CVS,Subv ...
- TOJ 4393 Game
描述 Bob always plays game with Alice.Today,they are playing a game on a tree.Alice has m1 stones,Bob ...
- Android中改变Activity的不同icon:activity-alias
Android设置title中的Icon有几种方法,介绍如下: 一种是直接在AndroidManifest.xml文件中设置android:icon属性,这种方法简单有效,应该算是我们最常用的设置Ic ...
- 已知tomcat应用名称,如何查询该应用端口号
假设应用名称叫pear,并假设路径为:/datong/tomcat-pear/ 方法一,根据PID查找应用端口号,前提是应用已经运行 1,找到改应用的PID:ps -ef | grep pear | ...
- Coursera 机器学习 第6章(上) Advice for Applying Machine Learning 学习笔记
这章的内容对于设计分析假设性能有很大的帮助,如果运用的好,将会节省实验者大量时间. Machine Learning System Design6.1 Evaluating a Learning Al ...
- 【VMware&Vritualbox】虚拟机安装windows server2016
一.下载镜像 参考链接:https://blog.csdn.net/yenange/article/details/52981769 http://blog.sina.com.cn/s/blog_10 ...
- React之特点及常见用法
1.什么是React? React是一个用于构建用户界面的JavaScript库.主要用于构建UI,很多人认为Reatc是MVC中的V(视图). React起源于Facebook的内部项目,用来架构I ...