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多种格式的异步解压/压缩解决方案
前言 最近由于项目需要,需要我谅解一下关于在移动平台的解压功能,在移动平台解压,我个人感觉是没有太大必要的,毕竟手机的性能有限.但是,不口否认,移动端的解压功能又是必备的,因为如果对于一些资源管理器类 ...
随机推荐
- JS禁用浏览器退格键实现思路及代码
[From] http://www.jb51.net/article/42562.htm 上周提交了一个项目(内部使用的),一同事提出个BUG,说要禁用退格键(backspace或者叫后退键),因为这 ...
- pandas强化练习
这篇文章写得更好:http://wittyfans.com/coding/%E5%88%A9%E7%94%A8Pandas%E5%88%86%E6%9E%90%E7%BE%8E%E5%9B%BD%E4 ...
- WPF 使用第三方ttf字体
1.将字体文件直接添加到项目中,注意:将文件的“属性”--“生成操作”设置为“Resource” 2.在Xaml中使用,text可以使用文字或直接使用unicode编码,XAML中使用Unicode编 ...
- centos yum安装高版本php,apache,mysql
1.检查当前安装的PHP包 yum list installed | grep php 或者 yum list installed php* 如果要删除,可执行 yum remove php.x8 ...
- BENZ Prognosis System C5 SD Be connected & Panasonic Xentry-Tab
Brand-new released!! Recently, we all autonumen website gives a brand-new Superstar prognosis bundle ...
- PHP 设置 socket连接
摘要: 作者博文地址:https://www.cnblogs.com/liu-shuai/ nginx和fastcgi的通信方式有两种,一种是TCP的方式,一种是unix socket方式. sock ...
- Oracle中查询关键字select--from--where--group by--having--order by执行顺序
select--from--where--group by--having--order by 这6个查询关键字的执行顺序: 1.from组装来自不同数据源的数据:2.where基于指定的条件对记录行 ...
- BNU 20950 ——沉重的货物 —————— · 最短路、最短边最大化」
沉重的货物 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: ...
- Jvav Collection-List
package 集合; import java.util.ArrayList; import java.util.Collection; /** * 集合和数组的区别: * 1.长度 * 数组长度固定 ...
- 深入理解Javascript封装DOMContentLoaded事件
最近在写一个Javascript的框架,刚把DOMContentLoaded事件封装好,略带小兴奋,把开发过程中遇到的原理和兼容性问题做篇笔记,省的忘记到处找. 我们在写js代码的时候,一般都会添加w ...