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

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

下面是基于zip4j实现加压解决的简单工具类

  1. package com.learcher.zip;
  2.  
  3. import java.io.File;
  4. import java.util.List;
  5.  
  6. import net.lingala.zip4j.core.ZipFile;
  7. import net.lingala.zip4j.exception.ZipException;
  8. import net.lingala.zip4j.model.FileHeader;
  9. import net.lingala.zip4j.model.ZipParameters;
  10. import net.lingala.zip4j.util.Zip4jConstants;
  11.  
  12. /**
  13. * @Code<code>ZipUtils</code>
  14. * @Comments
  15. * <p>在线加压zip与解压zip</p>
  16. * <p>依赖第三方jar包:zip4j_1.3.2.jar</p>
  17. * <p>jar 来源:http://maven.outofmemory.cn/net.lingala.zip4j/zip4j/1.3.2/
  18. * @CreateDate 2017-10-14 下午3:23:02
  19. * @author learcher
  20. * @modifyDate
  21. * @modifier
  22. * @version 1.0a
  23. * @since jdk1.6
  24. */
  25. public class ZipUtils {
  26.  
  27. /**
  28. * 解压密码
  29. */
  30. private static String PASSWORD="";
  31.  
  32. public static void main(String[] args) throws ZipException {
  33. String zipFromFile = "E:/temp/tmp/需要压缩的文件或目录";
  34. String zipToFile = "E:/temp/tmp/压缩后的文件地址.zip";
  35. // 压缩文件夹或文件到指定目录下
  36. ZipUtils.zip(zipFromFile, zipToFile);
  37. // ZipUtils.zip(zipFromFile, zipToFile, true);
  38. // ZipUtils.zip(zipFromFile, zipToFile, "password");
  39.  
  40. String unZipFromFile = "E:/temp/tmp/需要加压文件.zip";
  41. String unZipToPath = "E:/temp/tmp/加压后存放目录";
  42. // 解压文件到指定目录
  43. // ZipUtils.unZip(unZipFromFile);
  44. // ZipUtils.unZip(unZipFromFile, unZipToPath);
  45. // ZipUtils.unZip(unZipFromFile, unZipToPath, "password");
  46.  
  47. }
  48.  
  49. /**
  50. * @createDate:2017-10-14 下午4:50:03
  51. * @author: learcher
  52. * @Description:
  53. * <p>加压ZIP文件</p>
  54. * @param fromFile -> 需要加压的ZIP文件地址
  55. */
  56. public static void unZip(String fromFile){
  57. File file = new File(fromFile);
  58. doUnZip(file, file.getParent());
  59. }
  60.  
  61. /**
  62. * @createDate:2017-10-14 下午4:50:55
  63. * @author: learcher
  64. * @Description:
  65. * <p>加压ZIP文件</p>
  66. * @param fromFile -> 需要加压的ZIP文件地址
  67. * @param toPath -> 加压后的文件存放地址
  68. */
  69. public static void unZip(String fromFile, String toPath){
  70. if (toPath == null || "".equals(toPath.trim())){
  71. unZip(fromFile);
  72. }else{
  73. doUnZip(new File(fromFile), toPath);
  74. }
  75. }
  76.  
  77. /**
  78. * @createDate:2017-10-14 下午4:51:17
  79. * @author: learcher
  80. * @Description:
  81. * <p>加压ZIP文件</p>
  82. * @param fromFile -> 需要加压的ZIP文件地址
  83. * @param toPath -> 加压后的文件存放地址
  84. * @param Password -> 解压密码
  85. */
  86. public static void unZip(String fromFile, String toPath, String Password) {
  87. PASSWORD = Password;
  88. unZip(fromFile, toPath);
  89. }
  90.  
  91. /**
  92. * @createDate:2017-10-14 下午4:48:00
  93. * @author: learcher
  94. * @Description:
  95. * <p>解压ZIP文件</p>
  96. * @param fromFile -> 需要加压 的zip文件
  97. * @param toPath -> 加压后存放的目录
  98. */
  99. private static void doUnZip(File fromFile, String toPath){
  100. try{
  101. ZipFile zipFile = new ZipFile(fromFile);
  102. zipFile.setFileNameCharset("GBK");
  103. if (!zipFile.isValidZipFile()) {
  104. throw new ZipException("文件不合法或不存在!");
  105. }
  106. checkEncrypted(zipFile);
  107. List<FileHeader> fileHeaderList = zipFile.getFileHeaders();
  108. for (int i = 0; i < fileHeaderList.size(); i++) {
  109. FileHeader fileHeader = fileHeaderList.get(i);
  110. zipFile.extractFile(fileHeader, toPath);
  111. }
  112. }catch (Exception e) {
  113. e.printStackTrace();
  114. }
  115. }
  116.  
  117. /**
  118. * @createDate:2017-10-14 下午4:15:36
  119. * @author: learcher
  120. * @Description:
  121. * <p>检查加压是否需要密码</p>
  122. */
  123. private static void checkEncrypted(ZipFile zip) throws ZipException {
  124. if (zip.isEncrypted()) {
  125. zip.setPassword(PASSWORD);
  126. }
  127. }
  128.  
  129. /**
  130. * @createDate 2017-10-14 下午5:36:17
  131. * @author learcher
  132. * @Description
  133. * <p>把文件fromFile压缩为toFile</p>
  134. * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径)
  135. * @param toFile -> 压缩后的文件(完整路径)
  136. */
  137. public static void zip(String fromFile, String toFile){
  138. zip(fromFile, toFile, true);
  139. }
  140.  
  141. /**
  142. * @createDate 2017-10-14 下午5:36:17
  143. * @author learcher
  144. * @Description
  145. * <p>把文件fromFile压缩为toFile</p>
  146. * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径)
  147. * @param toFile -> 压缩后的文件(完整路径)
  148. * @param password -> 设置解密密码,注:该密码最对文件控制
  149. */
  150. public static void zip(String fromFile, String toFile, String password){
  151. PASSWORD = password;
  152. zip(fromFile, toFile, true);
  153. }
  154.  
  155. /**
  156. * @createDate 2017-10-14 下午5:36:17
  157. * @author learcher
  158. * @Description
  159. * <p>把文件fromFile压缩为toFile</p>
  160. * <p>注:如果不覆盖,则会继续将新文件写入原有的zip包中</p>
  161. * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径)
  162. * @param toFile -> 压缩后的文件(完整路径)
  163. * @param cover -> 是否覆盖原有文件,true=覆盖
  164. */
  165. public static void zip(String fromFile, String toFile, boolean cover){
  166. File zipFile = new File(toFile);
  167. if (!zipFile.getParentFile().exists()) {
  168. zipFile.getParentFile().mkdirs();
  169. }
  170. if (zipFile.exists() && cover) {
  171. zipFile.delete(); // 覆盖原有 文件
  172. }
  173. doZip(new File(fromFile), toFile);
  174. }
  175.  
  176. /**
  177. * @createDate 2017-10-14 下午5:33:44
  178. * @author learcher
  179. * @Description
  180. * <p>把文件fromFile压缩为toFile</p>
  181. * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径)
  182. * @param toFile -> 压缩后的文件(完整路径)
  183. */
  184. private static void doZip(File fromFile, String toFile){
  185. try {
  186. ZipFile zip=new ZipFile(toFile);
  187. zip.setFileNameCharset("GBK");
  188. ZipParameters param = new ZipParameters();
  189. // 设置压缩方式(默认方式)
  190. param.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
  191. // 设置压缩级别
  192. param.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
  193. setupPassword(param);
  194. if (fromFile.isFile()){
  195. zip.addFile(fromFile, param);
  196. }else{
  197. zip.addFolder(fromFile, param);
  198. }
  199. } catch (ZipException e) {
  200. e.printStackTrace();
  201. }
  202. }
  203.  
  204. /**
  205. * @createDate:2017-10-14 下午5:13:41
  206. * @author: learcher
  207. * @Description:
  208. * <p>设置解压密码</p>
  209. * @param param -> ZipParameters 参数对象
  210. */
  211. private static void setupPassword(ZipParameters param) {
  212. if (PASSWORD != null && !"".equals(PASSWORD.trim())){
  213. // 设置加密文件
  214. param.setEncryptFiles(true);
  215. // 设置加密方式(必须要有加密算法)
  216. param.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
  217. // 设置秘钥长度
  218. param.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
  219. param.setPassword(PASSWORD);
  220. }
  221. }
  222. }

更多信息可以去查看: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. JS禁用浏览器退格键实现思路及代码

    [From] http://www.jb51.net/article/42562.htm 上周提交了一个项目(内部使用的),一同事提出个BUG,说要禁用退格键(backspace或者叫后退键),因为这 ...

  2. pandas强化练习

    这篇文章写得更好:http://wittyfans.com/coding/%E5%88%A9%E7%94%A8Pandas%E5%88%86%E6%9E%90%E7%BE%8E%E5%9B%BD%E4 ...

  3. WPF 使用第三方ttf字体

    1.将字体文件直接添加到项目中,注意:将文件的“属性”--“生成操作”设置为“Resource” 2.在Xaml中使用,text可以使用文字或直接使用unicode编码,XAML中使用Unicode编 ...

  4. centos yum安装高版本php,apache,mysql

    1.检查当前安装的PHP包 yum list installed | grep php 或者   yum list installed php* 如果要删除,可执行 yum remove php.x8 ...

  5. 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 ...

  6. PHP 设置 socket连接

    摘要: 作者博文地址:https://www.cnblogs.com/liu-shuai/ nginx和fastcgi的通信方式有两种,一种是TCP的方式,一种是unix socket方式. sock ...

  7. Oracle中查询关键字select--from--where--group by--having--order by执行顺序

    select--from--where--group by--having--order by 这6个查询关键字的执行顺序: 1.from组装来自不同数据源的数据:2.where基于指定的条件对记录行 ...

  8. BNU 20950 ——沉重的货物 —————— · 最短路、最短边最大化」

    沉重的货物 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: ...

  9. Jvav Collection-List

    package 集合; import java.util.ArrayList; import java.util.Collection; /** * 集合和数组的区别: * 1.长度 * 数组长度固定 ...

  10. 深入理解Javascript封装DOMContentLoaded事件

    最近在写一个Javascript的框架,刚把DOMContentLoaded事件封装好,略带小兴奋,把开发过程中遇到的原理和兼容性问题做篇笔记,省的忘记到处找. 我们在写js代码的时候,一般都会添加w ...