最近看同事搞个文件打包,搞了大半天,还是有问题!嗨~~

网上明明有现成的,偏偏要自己写!

下面是基于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之加压解压的更多相关文章

  1. .NET使用ICSharpCode.SharpZipLib压缩/解压文件

    SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...

  2. C#第三方zip解压压缩工具,带事例源码

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using ICSharpCode. ...

  3. C#使用SharpZipLib压缩解压文件

    #region 加压解压方法 /// <summary> /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) /// </summary> // ...

  4. Java_压缩与解压工具类

    转载请注明出处:http://blog.csdn.net/y22222ly/article/details/52201675 zip压缩,解压 zip压缩与解压主要依靠java api的两个类: Zi ...

  5. C# .NET 使用第三方类库DotNetZip解压/压缩Zip文件

    dotNetZip on CodePlex: http://dotnetzip.codeplex.com/ 详细的可以看源代码……总之感觉比SharpZipLib好用.而且DotNetZip支持VB, ...

  6. CSharp tar类型文件压缩与解压

    最近闲暇时间开始写点通用基础类在写到tar类型文件压缩与解压时遇到点问题 压缩用的类库我是下载的 SharpZipLib_0860版本 先上代码 加压核心 /// <summary> // ...

  7. MySQL5.7.25(解压版)Windows下详细的安装过程

    大家好,我是浅墨竹染,以下是MySQL5.7.25(解压版)Windows下详细的安装过程 1.首先下载MySQL 推荐去官网上下载MySQL,如果不想找,那么下面就是: Windows32位地址:点 ...

  8. (转载)C#压缩解压zip 文件

    转载之: C#压缩解压zip 文件 - 大气象 - 博客园http://www.cnblogs.com/greatverve/archive/2011/12/27/csharp-zip.html C# ...

  9. Android多种格式的异步解压/压缩解决方案

    前言 最近由于项目需要,需要我谅解一下关于在移动平台的解压功能,在移动平台解压,我个人感觉是没有太大必要的,毕竟手机的性能有限.但是,不口否认,移动端的解压功能又是必备的,因为如果对于一些资源管理器类 ...

随机推荐

  1. while循环、运算符和格式化输出以及编码

    一.while循环 1.while就是当的意思,while指当其后面的条件成立,就执行while下面的代码 写一段代码让程序从0打印到100的程序,每次循环+1. count = 0 while co ...

  2. [转] Spring Boot 揭秘与实战(二) 数据存储篇 - ElasticSearch

    [From] http://www.tuicool.com/articles/JBvQrmj 本文讲解Spring Boot基础下,如何使用 ElasticSearch,实现全文搜索. 版本须知 sp ...

  3. 2019.3.22 SQL语句(基础篇)

    SQL语句 创建一个数据库: create database+数据库名; 使用数据库: use+数据库名; 查看mySQL中有哪些数据库: show databases; 删除数据库 drop dat ...

  4. centos 7 ssh登录安全问题

    2018-10-11 1.ssh禁止root远程登录 修改ssh配置文件/etc/ssh/sshd_config vim /etc/ssh/sshd_config PermitRootLogin ye ...

  5. android上最多有多少个http连接?

    1.使用HttpUrlConnection能有几个 测试机器版本是5.1.1 个数 网络连接是否报错 写文件是否报错  1024  A/art: art/runtime/indirect_refere ...

  6. shell 进阶之匹配字符串

      一,操作字符串 1,字符串长度 expr 命令取字符串函数 自带shell函数读取 2,匹配字符串开头字串的长度   !!!!!!!!!!!!$substring是正则表达式.!!!!!!!!! ...

  7. Angular4+NodeJs+MySQL 入门-04 接口调用类

    上一篇文章说一下,后台接口的创建,这篇说一下如果调用接口. 创建一个目录helpers 此目录下有三个文件分别是 ApiClient.ts.clientMiddleware.ts.Core.ts,前面 ...

  8. vue懒加载 && 浏览器高度

    当我们进入首页时,可能有很多条目需要显示,但是如果条目太多,我们全部将之显示出来就会造成性能的消耗,比如,我在第一条就找到了需要的或者我就看前面两条我就不想看后面的了,所以,这时候如果使用全部加载的方 ...

  9. c#特性类 Attribute

    Attribute FYI Link: Attribute在.net编程中的应用(一) Attribute在.net编程中的应用(二) Attribute在.net编程中的应用(三) Attribut ...

  10. log4j的AppenderLayout格式符

    %p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL. %d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd ...