热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

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

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


  
   net.lingala.zip4j
   zip4j
   1.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);
 }

}

效果如下:

在这里插入图片描述

到此这篇关于Java实现多文件压缩加密并重命名压缩文件对象的方法的文章就介绍到这了,更多相关java多文件压缩加密内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
author-avatar
gogo迷失的大G
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有