最近看同事搞個文件打包,搞了大半天,仍是有問題!嗨~~java
網上明明有現成的,恰恰要本身寫!算法
下面是基於zip4j實現加壓解決的簡單工具類maven
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工具