因为对项目突然要发送压缩加密的邮件附件,所以从网上看了一些资料说Zip4j开源框架比较好使,对中文的支持也比较好,所以从网上找了一个代码案例!自己写了一写,现在贴出来,方便以后想用的时候好找

1、

  1 package com.fenghao.zip;
  2
  3 import java.io.File;
  4
  5 import java.util.ArrayList;
  6 import java.util.Collections;
  7
  8 import net.lingala.zip4j.core.ZipFile;
  9 import net.lingala.zip4j.exception.ZipException;
 10 import net.lingala.zip4j.model.ZipParameters;
 11 import net.lingala.zip4j.util.Zip4jConstants;
 12
 13
 14
 15 /**
 16  * 对文件进行压缩和加密
 17  * 对文件进行解压和解密
 18  * @author fenghao
 19  *
 20  */
 21 public class CompressUtils {
 22
 23     /**
 24      * 解压加密的压缩文件
 25      * @param zipfile
 26      * @param dest
 27      * @param passwd
 28      * @throws ZipException
 29      */
 30     public void unZip(File zipfile,String dest,String passwd) throws ZipException{
 31         ZipFile zfile=new ZipFile(zipfile);
 32 //        zfile.setFileNameCharset("GBK");//在GBK系统中需要设置
 33         if(!zfile.isValidZipFile()){
 34             throw new ZipException("压缩文件不合法,可能已经损坏!");
 35         }
 36         File file=new File(dest);
 37         if(file.isDirectory() && !file.exists()){
 38             file.mkdirs();
 39         }
 40         if(zfile.isEncrypted()){
 41             zfile.setPassword(passwd.toCharArray());
 42         }
 43         zfile.extractAll(dest);
 44     }
 45     /**
 46      * 压缩文件且加密
 47      * @param src
 48      * @param dest
 49      * @param is
 50      * @param passwd
 51      */
 52     public void zip(String src,String dest,boolean is,String passwd){
 53         File srcfile=new File(src);
 54         //创建目标文件
 55         String destname = buildDestFileName(srcfile, dest);
 56         ZipParameters par=new ZipParameters();
 57         par.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
 58         par.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
 59         if(passwd!=null){
 60             par.setEncryptFiles(true);
 61             par.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
 62             par.setPassword(passwd.toCharArray());
 63         }
 64         try {
 65             ZipFile zipfile=new ZipFile(destname);
 66             if(srcfile.isDirectory()){
 67                 if(!is){
 68                     File[] listFiles = srcfile.listFiles();
 69                     ArrayList<File> temp=new ArrayList<File>();
 70                     Collections.addAll(temp, listFiles);
 71                     zipfile.addFiles(temp, par);
 72                 }
 73                 zipfile.addFolder(srcfile, par);
 74             }else{
 75                 zipfile.addFile(srcfile, par);
 76             }
 77         } catch (ZipException e) {
 78             e.printStackTrace();
 79         }
 80
 81
 82     }
 83     /**
 84      * 目标文件名称
 85      * @param srcfile
 86      * @param dest
 87      * @return
 88      */
 89     public String buildDestFileName(File srcfile,String dest){
 90         if(dest==null){//没有给出目标路径时
 91             if(srcfile.isDirectory()){
 92                 dest=srcfile.getParent()+File.separator+srcfile.getName()+".zip";
 93             }else{
 94                 String filename=srcfile.getName().substring(0,srcfile.getName().lastIndexOf("."));
 95                 dest=srcfile.getParent()+File.separator+filename+".zip";
 96             }
 97         }else{
 98             createPath(dest);//路径的创建
 99             if(dest.endsWith(File.separator)){
100                 String filename="";
101                 if(srcfile.isDirectory()){
102                     filename=srcfile.getName();
103                 }else{
104                     filename=srcfile.getName().substring(0, srcfile.getName().lastIndexOf("."));
105                 }
106                 dest+=filename+".zip";
107             }
108         }
109         return dest;
110     }
111     /**
112      * 路径创建
113      * @param dest
114      */
115     private void createPath(String dest){
116         File destDir=null;
117         if(dest.endsWith(File.separator)){
118             destDir=new File(dest);//给出的是路径时
119         }else{
120             destDir=new File(dest.substring(0,dest.lastIndexOf(File.separator)));
121         }
122         if(!destDir.exists()){
123             destDir.mkdirs();
124         }
125     }
126
127    @org.junit.Test
128    public void Test(){
129        String src="/home/fenghao/document/书籍类资料/Maven实战 高清扫描完整版.pdf";
130        String dest="/home/fenghao/zip/maven/123.zip";
131        zip(src, dest, true, "123456");
132    }
133 }

2、因为自己创建的时maven项目,所以吧jar包依赖也贴出来!

<!-- https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j -->
    <!-- 对压缩文件和加密的支持 -->
    <dependency>
        <groupId>net.lingala.zip4j</groupId>
        <artifactId>zip4j</artifactId>
        <version>1.3.2</version>
    </dependency>

private void createPath(String dest){File destDir=null;String separator=File.separator;if(dest.endsWith(separator)){destDir=new File(dest);}else{destDir=new File(dest.substring(0, dest.lastIndexOf("/")));//确认:/ \\ 路径分割符号,第一种验证时空//使用/做路径分割时,
        }if(!destDir.exists()){destDir.mkdirs();}}

在Windows测试环境可行

private void createPath(String dest){
        File destDir=null;
        String separator=File.separator;
        if(dest.endsWith(separator)){
            destDir=new File(dest);
        }else{
            destDir=new File(dest.substring(0, dest.lastIndexOf("/")));//确认:/ \\ 路径分割符号,第一种验证时空
            //使用/做路径分割时,
        }
        if(!destDir.exists()){
            destDir.mkdirs();
        }
    }

转载于:https://www.cnblogs.com/nihaofenghao/p/6033231.html

Zip4j开源jar包的简单使用相关推荐

  1. Java常用开源jar包

    Java常用开源jar包 转:http://blog.csdn.net/kevingao/article/details/8125683 activation~与javaMail有关的jar包,使用j ...

  2. Java 技术篇-使用poi开源jar包实现读取excel实例演示,poi-3.17.jar获取

    jar 包下载: poi-3.17.jar import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.use ...

  3. IDEA中MAVEN项目打JAR包的简单方法

    Idea中为一般的非Web项目打Jar包是有自己的方法的,网上一搜就能查到很多. 但是如果是为Maven项目打Jar包,其实是很简单的,因为maven本身就有打Jar包的命令. 最简单的方法 首先是在 ...

  4. 开源jar包导入查看源码

    我们用Ctrl + 左键查看源码的时候往往出现以下情况,是因为没有正确的导入jar包,以及没有导入src包 下面是解决方法(从导入jar包开始): 右键项目-->build ptah--> ...

  5. java和opencv配置_Java——OpenCVWindows配置和项目中jar包的简单配置

    1. 安装OpenCV 1.1 下载相应的OpenCV版本,解压 1.2 将 openCV的dll文件(D:\InstallPackages\OpenCV\opencv\build\java\x64) ...

  6. java -cp 引用多个包_Java -cp 命令行引用多个jar包的简单写法(Windows、Linux)

    1.Windows下用法 在Windows上,可以使用 java your-jar-lib-fold/* your-main-class your-jar-lib-fold为存放一堆jar文件的路径. ...

  7. 阿里云-视频点播-SDK-安装非开源jar包:aliyun-java-vod-upload-1.4.11.jar

    一.下载jar包 链接:https://pan.baidu.com/s/1z4LwHmvSou5QW9-8csThBw 提取码:1234 将lib里的全部下载下来 二.打开本地maven仓库 mvn所 ...

  8. 记录一次提交开源JAR包到中央仓库的过程

    2019独角兽企业重金招聘Python工程师标准>>> 编写开源工程 我这次要开源的mybatis.batch插件,用于简化批量提交. 代码地址:https://github.com ...

  9. Java去除掉HTML里面所有标签的两种方法——开源jar包和自己写正则表达式

    Java去除掉HTML里面所有标签,主要就两种,要么用开源的jar处理,要么就自己写正则表达式.自己写的话,可能处理不全一些自定义的标签.企业应用基本都是能找开源就找开源,实在不行才自己写-- 1,开 ...

最新文章

  1. matlab读入从文件中读取大量的数据
  2. 如何编写无法维护的代码_编写可维护的前端代码
  3. 用于弹出ModalDialog进行数据选择的控件
  4. 每天一道LeetCode-----数组序列,每个元素的值表示最多可以向后跳多远,计算最少跳多少次可以到达末尾
  5. 记一次 @Transactional不生效的问题
  6. 最激动人心的视觉系统其实是最枯燥乏味的
  7. 手把手教您解决90%的自然语言处理问题
  8. 相似矩阵对角化 | 找到一个可逆矩阵 P 使得 P^(-1)AP 成为一个对角矩阵
  9. CS61a-2020fall学习笔记
  10. linux 取消分区,如何在 Linux 中删除分区 | Linux 中国
  11. 平面设计师okr_为什么说一名优秀的设计师要懂得OKR
  12. iTunes备份文件路径修改方法
  13. 浏览器内部工作原理[译]How browsers work (转)
  14. 计算广告CTR预估系列(九)--NFM模型理论与实践
  15. python发送邮件时报: Error: need RCPT command
  16. matlab awgn函数加入高斯白噪声
  17. 定制你的语音识别-并行语音识别解码空间
  18. wordpress php缓存,wordpress自带的缓存功能使用介绍
  19. 主流数据库实时同步/实时ETL工具的比较
  20. 迅雷VIP尊享版系列

热门文章

  1. 机器学习偏差方差_机器学习101 —偏差方差难题
  2. 向量 矩阵 张量_张量,矩阵和向量有什么区别?
  3. 程序员发展应该尽早明白13个道理
  4. 被冻结的钱,银行可以私自处理吗?
  5. linux 查找文件夹_用python打造一个基于socket的文件(夹)传输系统
  6. php curl上传文件返回false,php curl上传文件$_FILES为空的问题
  7. cad移动时捕捉不到基点_硬盘或移动硬盘认不到时,应该怎样进行故障的检测才正确...
  8. python有没有帮助_没想到,python给我的帮助竟然这么大
  9. uniapp怎么调起摄像头拍视频_抖音视频怎么拍?我们总结了10个手机视频拍摄小技巧...
  10. android 刷windows10,微软计划在Android机上刷Windows 10