微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java实现多文件压缩加密并重命名压缩文件对象的方法

这篇文章主要介绍了Java实现多文件压缩加密并重命名压缩文件对象的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

Java 多文件加密压缩 添加文件加密压缩工具包依赖

net.lingala.zip4jzip4j1.3.2

话不多说,直接上干货

完整代码如下:

package com.rhtcms.cms.api.admin.main; import org.json.JSONObject; import org.springframework.stereotype.Controller; import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.util.Zip4jConstants; import java.io.*; import java.util.*; public class FileCompressionApiAct { /** * 复制压缩文件路径 ps:此路径必须为空文件夹,在压缩完成后此文件夹将被清空目录 */ private static String copyPath = "c:/Users/Administrator/Desktop/压缩测试/压缩测试作业复制"; private static long time = System.currentTimeMillis();//以时间戳作为文件名,防止重命名问题 /** * 压缩包路径: 路径+压缩包名称 eg: C:/Users/Administrator/Desktop/压缩测试/ + test.zip */ private static String zipPath = "C:/Users/Administrator/Desktop/压缩测试/" + time + ".zip"; /** * 可支持的压缩文件格式 */ private static String[] fileType = {"doc", "docx", "pdf", "txt"}; /** * @param filePath 压缩文件路径 * @param fileRename 压缩文件重命名名称 * @param password 加密密码 * @return * @Title: zipFilesAndEncrypt * @Description: 将指定路径下的文件压缩至指定zip文件,并以指定密码加密,若密码为空,则不进行加密保护 * @Author: 张庆裕 * @Date: 2021/01/04 */ //@RequestMapping("/fileCompression/list") public String zipFilesAndEncrypt(List filePath, List fileRename, String password) { /** * 压缩成功的文件数量 */ int successCount = 0; /** * 压缩失败的文件数量 */ int failCount = 0; /** * 返回数据 */ JSONObject ob = new JSONObject(); ArrayList failFile = new ArrayList();//压缩失败的文件路径 ArrayList failFilePath = new ArrayList();//路径错误文件 ArrayList filesToAdd = new ArrayList();//压缩路径的集合 //创建复制文件夹 File folder = new File(copyPath); if(!folder.exists()){//如果文件夹不存在 boolean mkdir = folder.mkdir();//创建文件夹 if(!mkdir){//系统未找到该路径 throw new RuntimeException("复制文件路径出错,请修改复制文件夹路径"); } }else{//文件夹存在 File[] listFiles = folder.listFiles(); if(listFiles.length > 0){//如何文件夹下存在目录则,停止压缩,防止删除其他文件 throw new RuntimeException("复制的文件夹不为空,请选择空文件夹!"); } } for (int i = 0; i 从一个目标读取数据 // 输出流 --> 向一个目标写入数据 long start = System.currentTimeMillis(); // 文件输入流并进行缓冲 FileInputStream inputStream = new FileInputStream(resource); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); // 文件输出流并进行缓冲 FileOutputStream outputStream = new FileOutputStream(target); bufferedoutputstream bufferedoutputstream = new bufferedoutputstream(outputStream); // 缓冲数组 // 大文件 可将 1024 * 2 改大一些,但是 并不是越大就越快 byte[] bytes = new byte[1024 * 2]; int len = 0; while ((len = inputStream.read(bytes)) != -1) { bufferedoutputstream.write(bytes, 0, len); } // 刷新输出缓冲流 bufferedoutputstream.flush(); //关闭流 bufferedInputStream.close(); bufferedoutputstream.close(); inputStream.close(); outputStream.close(); long end = System.currentTimeMillis(); System.out.println("复制文件:" + resource.getPath() + " 成功 耗时:" + (end - start) / 1000 + " s"); } /** * @Description: 清空复制压缩文件下的内容 * @Param: path 复制文件夹的路径 * @return: * @Author: 张庆裕 * @Date: 2021/1/6 */ public boolean deleteDir(String path) { File file = new File(path); if (!file.exists()) {//判断是否待删除目录是否存在 System.err.println("The dir are not exists!"); return false; } String[] content = file.list();//取得当前目录下所有文件文件夹 for (String name : content) { File temp = new File(path, name); if (temp.isDirectory()) {//判断是否是目录 deleteDir(temp.getAbsolutePath());//递归调用删除目录里的内容 temp.delete();//删除空目录 } else { if (!temp.delete()) {//直接删除文件 System.err.println("Failed to delete " + name); } } } return true; } /** * @Description: 文件压缩测试接口 * @Param: * @return: * @Author: 张庆裕 * @Date: 2021/1/7 */ public static void main(String[] args) { List filePath = new ArrayList();//压缩文件路径 filePath.add(new File("C:/Users/Administrator/Desktop/压缩测试/yasuo/OA平台问题.docx")); filePath.add(new File("C:/Users/Administrator/Desktop/压缩测试/yasuo/OA平台问题1.docx")); filePath.add(new File("C:/Users/Administrator/Desktop/压缩测试/yasuo/OA平台问题2.docx")); filePath.add(new File("C:/Users/Administrator/Desktop/压缩测试/yasuo/OA平台问题3.docx")); filePath.add(new File("C:/Users/Administrator/Desktop/压缩测试/yasuo/邮箱1.md")); filePath.add(new File("C:/Users/Administrator/Desktop/压缩测试/yasuo/邮箱2.md")); List fileRename = new ArrayList();//压缩文件重命名名称 fileRename.add("oa平台问题.docx"); fileRename.add("oa平台问题1.docx"); fileRename.add("oa平台问题2.docx"); fileRename.add("oa平台问题3.docx"); fileRename.add("邮箱副本1.md"); fileRename.add("邮箱副本2.md"); String password = "123456";//加密密码 //请在单元测试进行测试, 或者将方法改为 static 方法 //String result = zipFilesAndEncrypt(filePath, fileRename, password); //System.out.println(result); } }

效果如下:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐