java 操作Zip文件(压缩、解压、加密)

依赖:点击下载

package com.zxl.test;import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.tools.zip.ZipFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class FileZipUtils {private static Logger logger = LoggerFactory.getLogger(FileZipUtils.class);public static void main(String[] args) {// 解压
//        unZipFiles("C:\\Users\\Administrator\\Desktop\\脱敏测试.zip","C:\\Users\\Administrator\\Desktop\\");// 压缩
//        zipFiles("C:\\Users\\Administrator\\Desktop\\脱敏测试\\","C:\\Users\\Administrator\\Desktop\\脱敏测试压缩.zip");// 加密zipEncrypt("C:\\Users\\Administrator\\Desktop\\脱敏测试压缩.zip","C:\\Users\\Administrator\\Desktop\\脱敏测试压缩加密.zip","123");}/*** 压缩文件目录* @param source 源文件目录(单个文件和多层目录)* @param destit 目标目录*/public static void zipFiles(String source,String destit) {File file = new File( source );ZipOutputStream zipOutputStream = null;FileOutputStream fileOutputStream = null;try {fileOutputStream = new FileOutputStream( destit );zipOutputStream = new ZipOutputStream( fileOutputStream );if (file.isDirectory()) {directory( zipOutputStream, file, "" );}logger.debug("文件压缩成功!");} catch (Exception e) {logger.debug("文件压缩失败!");e.printStackTrace();} finally {try {zipOutputStream.close();fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}/*** 解压缩ZIP文件,将ZIP文件里的内容解压到descFileName目录下* @param zipFileName 需要解压的ZIP文件* @param descFileName 目标目录*/public static boolean unZipFiles(String zipFileName, String descFileName) {String descFileNames = descFileName;if (!descFileNames.endsWith(File.separator)) {descFileNames = descFileNames + File.separator;}try {// 根据ZIP文件创建ZipFile对象ZipFile zipFile = new ZipFile(zipFileName);org.apache.tools.zip.ZipEntry entry = null;String entryName = null;String descFileDir = null;byte[] buf = new byte[4096];int readByte = 0;// 获取ZIP文件里所有的entry@SuppressWarnings("rawtypes")Enumeration enums = zipFile.getEntries();// 遍历所有entrywhile (enums.hasMoreElements()) {entry = (org.apache.tools.zip.ZipEntry) enums.nextElement();// 获得entry的名字entryName = entry.getName();descFileDir = descFileNames + entryName;if (entry.isDirectory()) {// 如果entry是一个目录,则创建目录new File(descFileDir).mkdirs();continue;} else {// 如果entry是一个文件,则创建父目录new File(descFileDir).getParentFile().mkdirs();}File file = new File(descFileDir);// 打开文件输出流OutputStream os = new FileOutputStream(file);// 从ZipFile对象中打开entry的输入流InputStream is = zipFile.getInputStream(entry);while ((readByte = is.read(buf)) != -1) {os.write(buf, 0, readByte);}os.close();is.close();}zipFile.close();logger.debug("文件解压成功!");return true;} catch (Exception e) {logger.debug("文件解压失败:" + e.getMessage());return false;}}/*** zip包加密* @param filePath 要加密的zip文件* @param savePath 加密后的zip文件* @param password 密码* @return*/private static boolean zipEncrypt(String filePath, String savePath, String password) {String zipFolder = FilenameUtils.getFullPath(filePath) + File.separator +FilenameUtils.getBaseName(savePath);logger.debug("解压文件:{}",filePath);logger.debug("解压目录:{}",zipFolder);try {FileZipUtils.unZipFiles(filePath,zipFolder);net.lingala.zip4j.core.ZipFile zipFile = new net.lingala.zip4j.core.ZipFile(savePath);//设置压缩文件参数ZipParameters parameters = new ZipParameters();//设置压缩方法parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);//设置压缩级别parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);//是否加密parameters.setEncryptFiles(true);//设置密码parameters.setPassword(password);//加密方法parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);设置aes加密强度parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);//添加文件到压缩文件zipFile.addFolder(zipFolder,parameters);FileZipUtils.deleteFolder(zipFolder);logger.debug("加密成功!");return true;} catch (Exception e) {e.printStackTrace();logger.error("对【{}】文件加密处理异常:{}",filePath,e.getMessage());return false;}}/*** 递归压缩目录结构* @param zipOutputStream* @param file* @param parentFileName*/private static void directory(ZipOutputStream zipOutputStream,File file,String parentFileName){File[] files = file.listFiles();String parentFileNameTemp = null;for (File fileTemp: files) {parentFileNameTemp =  StringUtils.isEmpty(parentFileName)?fileTemp.getName():parentFileName+"/"+fileTemp.getName();if(fileTemp.isDirectory()){directory(zipOutputStream,fileTemp, parentFileNameTemp);}else{zipFile(zipOutputStream,fileTemp,parentFileNameTemp);}}}private static void zipFile(ZipOutputStream zipOutputStream, File file, String parentFileName){FileInputStream in = null;try {ZipEntry zipEntry = new ZipEntry( parentFileName);zipOutputStream.putNextEntry( zipEntry );in = new FileInputStream( file);int len;byte [] buf = new byte[8*1024];while ((len = in.read(buf)) != -1){zipOutputStream.write(buf, 0, len);}zipOutputStream.closeEntry(  );} catch (FileNotFoundException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {try{in.close();} catch (IOException e) {e.printStackTrace();}}}// 删除目录public static boolean deleteFolder(String folderPath){File file = new File(folderPath);if (file.isDirectory()){File[] files = file.listFiles();for (File file1 : files) {if (file1.isFile()){file1.delete();}else if (file1.isDirectory()){deleteFolder(file1.getAbsolutePath());}}file.delete();}return file.exists() ? false : true;}}

java 操作Zip文件(压缩、解压、加密)相关推荐

  1. Java实现Zip文件的解压和压缩_ZipUtil

    这是一个关于Java的zip文件的解压和压缩工具类,里面除了解压和压缩还有删除.copy等其他功能. 在Java开发中,经常会遇到上传下载,有可能就会遇到解压,于是我就封装了工具类,方便使用. 在本文 ...

  2. linux jar和zip,Linux命令———zip和jar文件压缩解压

    Linux命令---zip和jar文件压缩解压 (1)ubuntu 使用unzip和zip压缩文件 1.功能作用:解压缩zip文件 2.位置:/usr/bin/unzip 3.格式用法:unzip [ ...

  3. Linux常用文件压缩/解压命令格式大全(tar、gzip、bzip2、zip、compress、cpio、compress、dd)建议收藏

    Linux常用文件压缩/解压命令格式大全 1. tar 2. gzip 3. bzip2 4. zip 5. compress 6. cpio 7.dd 1. tar 打包备份后的文件包缀:.tar ...

  4. python压缩文件tar_python 实现tar文件压缩解压的实例详解

    python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...

  5. 【文件压缩解压工具类-含密码】

    文件压缩解压工具类-含密码 一.zip4j简介 二.zip4j工具类使用步骤 1.添加maven依赖 2.工具类代码 3.调用测试 三.结语 一.zip4j简介 zip4j功能比较强大,支持加密.解密 ...

  6. ZIP文件夹解压小程序

    第1关:ZIP文件夹解压小程序之文件压缩 任务描述 相关知识 编程要求 测试说明 任务描述 本关任务:实现压缩文件或文件夹的功能. 相关知识 ZIP 是一种较为常见的压缩形式,在 Java 中要想实现 ...

  7. 压缩包下载后php文件怎么打开,用户下载的压缩包rar格式或zip文件如何解压 解压后就可以安装或运行里面的文件了...

    狸窝网盘中分享有很多解决方案中使用到的软件资源,下载到电脑后是一个软件的文件压缩包,有的用户下载后不知道如何解压或说解压不了,怎么办?由于狸窝所面向用户比较大众化,为方便不同年龄层次和新手的使用,这里 ...

  8. Qt基于QuaZIP实现文件压缩/解压(Linux下)

    Qt基于QuaZIP实现文件压缩/解压(Linux下) 一.工具准备 二.编译zlib 1.下载zlib源码 2.配置 3.编译与安装 三.编译QuaZIP 1.下载QuaZIP源码 2.将zlib库 ...

  9. Qt基于QuaZIP实现文件压缩/解压(Win下)

    Qt基于QuaZIP实现文件压缩/解压(Win下) 一.工具准备 二.编译zlib 1.下载zlib源码 2.生成VS工程文件 3.使用VS进行编译 三.编译QuaZIP 1.下载QuaZIP源码 2 ...

最新文章

  1. Mac下添加Hibernate时报错Unsupported major.minor version
  2. Caused by: org.apache.ibatis.reflection.ReflectionException我碰到的情况,原因不唯一
  3. JAVA静态方法是否可以被继承 6,JAVA静态方法是否可以被继承?
  4. 批量打印html文档,web页面的单页打印以及批量打印实现方法
  5. oracle sql 调用自定义函数_PSCAD入门教程(第7节):怎样调用fortran编写的自定义函数?(附模型)...
  6. java运行jar命令提示没有主清单属性
  7. C# 关闭主窗口后让所有线程都停止工作
  8. Pickle Finance:BAC-DAI Pickle Jar将在迁移到BAS v2后更新
  9. 【js】正则表达式(II)
  10. 该如何弥补 GitHub 功能缺陷?
  11. 希尔排序和归并排序(java实现)
  12. 多校赛 Barareh on Fire
  13. 第16节 最好的实践(16.1~16.5)
  14. 编译原理 —— 逆波兰式
  15. 2021届双非本科的心酸秋招经历总结及经验分享
  16. 使用CDN实现应用的缓存和加速
  17. 云栖大会倒计时,17个精彩的故事与你一起等待!
  18. linux内核书籍推荐
  19. 利用Fitbit,十秒入侵PC
  20. JAVA内存管理机制

热门文章

  1. linux显示mem进行排序,linux下top命令显示详解
  2. 数学家教你烤肉饼:按最佳时机翻面可节省近1/3烹饪时间,网友:想去汉堡王应聘厨子了...
  3. mvc4.0 @ViewBag.Title
  4. Chrome 浏览器安装插件
  5. python统计单词出现次数 青少年编程电子学会python编程等级考试二级真题解析2022年3月
  6. 在线客服功能介绍-了解常见在线客服系统的功能点
  7. 《UEFI内核导读》全集,2023年更新
  8. 【语音识别】基于VQ特定人孤立词语音识别附matlab代码
  9. Python 北京二手房成交数据分析过程
  10. matlab基础知识与简单操作