Zip4j開源jar包的簡單使用

因為對項目突然要發送壓縮加密的郵件附件,所以從網上看了一些資料說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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256054.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256054.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256054.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【pyqt5】——入門級模板(ui文件+ui轉py文件+邏輯py文件)(消息提示框)

目錄 1、ui文件 2、ui轉py文件 3、邏輯py文件 4、實例 1&#xff09;ui文件——demo.ui 2&#xff09;ui轉py文件——demo.py 3)邏輯py文件——demoLogic.py 4)運行結果 1、ui文件 這個文件是直接通過pyqt5 designer進行設計的&#xff0c;相關配置可見《配置Qt Design…

PCL中點特征描述子PFH、FPFH和VFH簡述和示例

文章目錄前言一、點特征直方圖1.1 PFH1.1.1 法線估計1.1.2 特征計算1.2 FPFH1.3 VFH二、示例2.1 PFH計算2.2 FPFH2.3 VFH前言 點特征直方圖是PCL中非常重要的特征描述子&#xff0c;在點云匹配、分割、重建等任務中起到關鍵作用&#xff0c;可以對剛體變換、點云密度和噪聲均有…

BZOJ 1005: [HNOI2008]明明的煩惱

BZOJ 1005: [HNOI2008]明明的煩惱 Description 自從明明學了樹的結構,就對奇怪的樹產生了興趣......給出標號為1到N的點,以及某些點最終的度數,允許在 任意兩點間連線,可產生多少棵度數滿足要求的樹? Input 第一行為N(0 < N < 1000), 接下來N行,第i1行給出第i個節點的度…

Apache Directory 指令

<Directory> 指令 語法&#xff1a;<Directory directory-path> ... </Directory> <Directory>和</Directory>用于封裝一組指令&#xff0c;使之僅對某個目錄及其子目錄生效。任何可以在"directory"作用域中使用的指令都可以使用。Dir…

來一個炫酷的導航條

本文分享一個帶動畫效果的中英文切換導航條。 鼠標放上去試一下&#xff1a; INDEX 首頁 BBS 社區 HOME 我 1.用CSS3實現 效果看上去復雜&#xff0c;其實我們先來做出一個樣式&#xff0c;就很簡單了。如下&#xff1a; 代碼&#xff1a; <nav><ul class"list…

基于C++的opencv中Mat矩陣運算方法總結

文章目錄前言一、Mat運算種類1.1 代數運算1.2 類型轉換前言 Mat類是目前opencv最為常用的圖像數據格式&#xff0c;其優點在于無需手動開辟內存空間和實時釋放&#xff0c;針對此類的各種運算方法有很多&#xff0c;本文按照各種運算方法的種類進行簡單的總結和示例。 一、Mat…

【pyqt5】——信號與槽

一、簡單Demo 簡單使用信號和槽&#xff08;之前常用的使用方式&#xff09;&#xff1a; class DemoWin(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.resize(400, 250)self.btn QPushButton("發送信號", self)# 發送…

JSON - 簡介

JSON - 簡介 JSON實例 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鳥教程(runoob.com)</title> </head> <body> <h2>JavaScript 創建 JSON 對象</h2> <p> 網站名稱: <spa…

mysql慢日志管理

一、日志切割 原理&#xff1a; 1、cp一個慢日志備份 2、清空原理的慢日志 3、寫成腳本&#xff0c;每天一切&#xff0c;這樣就ok啦 二、查找日志中的慢日志 1、做了日志切割&#xff08;慢日志文件就小了&#xff09; 2、查找某個時間的慢日志 日志時間格式&#xff1a; # Ti…

【深度學習】mask_rcnn訓練自己的數據集以及模型使用(實踐結合GitHub項目)

根據requirements - 開源項目默認的.txt進行庫安裝 環境&#xff1a;WIN10 Anoconda Pycharm python3.6.2 mask_rcnn基本流程1、訓練 1)labelme進行目標物體標記&#xff0c;生成json文件&#xff0c;含點坐標、以及各個物體的標簽label; json文件的格式&#xff1a;&…

EXCEL小技巧:如何統計非空單元格

http://club.excelhome.net/thread-1187271-1-1.html 下面教大家如果用函數統計非空單元格的數量 首先我們來介紹幾個統計函數&#xff1a; 1.COUNT(value1,value2,...) 統計包含數字的單元格個數 2.COUNTA(value1,value2,...) 統計非空單元格的個數 3.COUNTBLANK(range&…

easyui 頁簽

昨天開始搭后臺框架&#xff0c;到晚上的時候遇到了一個現在覺得挺可笑但是當時一直很糾結很糾結的問題&#xff0c;這個問題剛剛解決出來&#xff0c;把它拿出來說說&#xff0c;讓自己長點兒記性&#xff0c;希望大家不要犯我這個錯誤啊 在backstage.jsp頁面中我寫了一個方法…

未在本地計算機上注冊“Microsoft.Jet.OLEDB.4.0”提供程序。

報錯信息&#xff1a; 解決方案&#xff1a; 1、“設置應用程序池默認屬性”/“常規”/”啟用32位應用程序”&#xff0c;設置為 true。 如下圖所示&#xff1a;&#xff08;已測試&#xff0c;好使&#xff09; 方法二&#xff1a;生成->配置管理器->平臺->點擊Any C…

UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figur

“UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure”在利用mask_rcnn進行物體檢測的時候出現的問題&#xff0c;主要是因為matplotlib的使用格式不對 可以檢查者兩個地方&#xff1a; 1、visualize.py中 import mat…

008. 限制上傳文件的大小

第一種方法: 利用web.config的配置文件項, 進行設置; 前端aspx示例: <% Page Language"C#" AutoEventWireup"true" CodeFile"sendOutEmail.aspx.cs" Inherits"sendOutEmail" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHT…

查詢實例及其代碼

一、 設有一數據庫&#xff0c;包括四個表&#xff1a;學生表&#xff08;Student&#xff09;、課程表&#xff08;Course&#xff09;、成績表&#xff08;Score&#xff09;以及教師信息表&#xff08;Teacher&#xff09;。四個表的結構分別如表1-1的表&#xf…

pyinstaller打包執行exe出現“ModuleNotFoundError: No module named ‘scipy.spatial.transform._rotation_group”

這個是因為打包后的第三方庫中缺少了pyd文件 具體的解決方法&#xff1a; 去環境下找到相應的py文件&#xff0c;根據https://blog.csdn.net/qq_41007606/article/details/109565069文章寫的方法&#xff0c;將py編譯成pyd文件&#xff0c;然后將pyd文件復制到dist相應的第三…

浙江中醫藥大學第十一屆程序設計競賽題解

官方題解&#xff1a;http://www.jnxxhzz.com/Article/article/9.html 2019: 特產 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 548 Solved: 154[Submit][Status][Web Board]Description Input Output 輸出一個整數表示dd帶回來的特產重量 Sample Input 2 3 6 1 3Sample …

vijos p1002——過河(noip2005提高組T2)

描述 在河上有一座獨木橋&#xff0c;一只青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子&#xff0c;青蛙很討厭踩在這些石子上。由于橋的長度和青蛙一次跳過的距離都是正整數&#xff0c;我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點&#xff1a;0&…

JNI學習

1. 目前調用關系已經搞清楚&#xff0c;需要編譯一個so或者dll的動態庫給java調用。 2. env有很多方法現在還不清楚&#xff0c; 獲得屬性句柄。 JNI方法描述符&#xff0c;主要就是在括號里放置參數&#xff0c;在括號后面放置返回類型&#xff0c;如下&#xff1a;&#xff0…