最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)多文件壓縮加密并重命名壓縮文件對象的方法

 更新時間:2021年01月09日 10:43:21   作者:weixin_44980116  
這篇文章主要介紹了Java實現(xiàn)多文件壓縮加密并重命名壓縮文件對象的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Java 多文件加密壓縮 添加文件加密壓縮工具包依賴

<!-- zip4j壓縮工具 -->
  <dependency>
   <groupId>net.lingala.zip4j</groupId>
   <artifactId>zip4j</artifactId>
   <version>1.3.2</version>
  </dependency>

話不多說,直接上干貨

完整代碼如下:

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/壓縮測試/壓縮測試作業(yè)復制";

 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<File> filePath, List<String> fileRename, String password) {
  /**
   * 壓縮成功的文件數(shù)量
   */
  int successCount = 0;
  /**
   * 壓縮失敗的文件數(shù)量
   */
  int failCount = 0;
  /**
   * 返回數(shù)據(jù)
   */
  JSONObject ob = new JSONObject();

  ArrayList<String> failFile = new ArrayList<>();//壓縮失敗的文件路徑

  ArrayList<String> failFilePath = new ArrayList<>();//路徑錯誤的文件

  ArrayList<File> filesToAdd = new ArrayList<>();//壓縮路徑的集合

  //創(chuàng)建復制文件夾
  File folder = new File(copyPath);
  if(!folder.exists()){//如果文件夾不存在
   boolean mkdir = folder.mkdir();//創(chuàng)建文件夾
   if(!mkdir){//系統(tǒng)未找到該路徑
    throw new RuntimeException("復制文件路徑出錯,請修改復制文件夾路徑");
   }
  }else{//文件夾存在
   File[] listFiles = folder.listFiles();
   if(listFiles.length > 0){//如何文件夾下存在目錄則,停止壓縮,防止刪除其他文件
    throw new RuntimeException("復制的文件夾不為空,請選擇空文件夾!");
   }
  }

  for (int i = 0; i < filePath.size(); i++) {//遍歷壓縮文件數(shù)據(jù)
   File file = filePath.get(i);//獲取原文件
   if (!file.exists()) {//防止文件異常,首先再次確認文件路徑是否存在
    // 文件不存在
    failCount++;
    failFilePath.add(file.getPath());
    System.out.println("文件:" + file.getPath() + " 路徑不存在!");
    ob.put("failFilePath", failFilePath);
   } else {//文件存在
    //獲取原文件路徑
    String path = filePath.get(i).getPath();
    //獲取最后一個點的位置
    int lastIndexOf = path.lastIndexOf(".");
    //獲取文件后綴 eg: txt , doc , pdf ....
    String suffix = path.substring(lastIndexOf + 1);
    if (Arrays.asList(fileType).contains(suffix)) {  //判斷文件格式是否合格,合格添加至壓縮文件中
     //獲取原文件名稱
     File oldName = new File(file.getPath());

     //先復制文件
     File newName = new File(copyPath + "/" + file.getName());
     try {
      copyFile(oldName, newName);
     } catch (Exception e) {
      e.printStackTrace();
     }
     //String path = newName.getPath();//獲取復制文件的路徑
     String parentPath = newName.getParent();//獲取復制出來的文件的父級目錄
     String reName = fileRename.get(i);//獲取重命名的名稱

     newName.renameTo(new File(parentPath + "/" + reName));//重命名復制出來的文件
     filesToAdd.add(new File(parentPath + "/" + reName));//將賦值出來的文件添加到壓縮文件集合中
     successCount++;//壓縮成功文件數(shù)量+1
    } else {
     failFile.add(file.getPath());
     failCount++;//壓縮失敗文件數(shù)量+1

     ob.put("filePath", failFile);
     System.out.println("該文件壓縮失敗:" + file.getPath() + " 文件格式錯誤!");
    }
   }
  }
  //壓縮配置
  try {
   ZipParameters parameters = new ZipParameters();
   parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);//壓縮方式
   //設置壓縮級別
   //DEFLATE_LEVEL_FASTEST - 最低壓縮級別,但壓縮速度更高
   //DEFLATE_LEVEL_FAST - 低壓縮級別,但壓縮速度更高
   //DEFLATE_LEVEL_NORMAL - 壓縮水平速度之間的最佳平衡
   //DEFLATE_LEVEL_MAXIMUM - 高壓縮級別,但速度不佳
   //DEFLATE_LEVEL_ULTRA - 最高壓縮級別但速度較低
   parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);//壓縮級別
   if (password != null && password!="") {
    parameters.setEncryptFiles(true);//設置壓縮文件加密
    parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);//加密方式
    parameters.setPassword(password);//設置加密密碼
   }
   ZipFile zipFile = new ZipFile(zipPath);//創(chuàng)建壓縮路徑
   zipFile.setFileNameCharset("gbk");//設置壓縮編碼
   zipFile.addFiles(filesToAdd, parameters);//添加壓縮文件并進行加密壓縮
   //壓縮完成后清空復制的文件目錄
   deleteDir(copyPath);
   ob.put("zipPath", zipPath);
   ob.put("successCount", successCount);
   ob.put("failCount", failCount);
  } catch (ZipException e) {
   //清空復制的文件目錄
   deleteDir(copyPath);
   ob.put("unKnown", "未知異常,壓縮失敗!");
   System.out.println("文件壓縮出錯");
   e.printStackTrace();
  }
  return ob.toString();
 }

 /**
  * @Description: 文件復制
  * @Param: resource 原文件路徑
  * @Param: target 新文件路徑
  * @return:
  * @Author: 張慶裕
  * @Date: 2021/1/6
  */
 public void copyFile(File resource, File target) throws Exception {
  // 輸入流 --> 從一個目標讀取數(shù)據(jù)
  // 輸出流 --> 向一個目標寫入數(shù)據(jù)
  long start = System.currentTimeMillis();
  // 文件輸入流并進行緩沖
  FileInputStream inputStream = new FileInputStream(resource);
  BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
  // 文件輸出流并進行緩沖
  FileOutputStream outputStream = new FileOutputStream(target);
  BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
  // 緩沖數(shù)組
  // 大文件 可將 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: 清空復制壓縮文件下的內(nèi)容
  * @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());//遞歸調(diào)用,刪除目錄里的內(nèi)容
    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<File> 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<String> 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實現(xiàn)多文件壓縮加密并重命名壓縮文件對象的方法的文章就介紹到這了,更多相關java多文件壓縮加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java重點梳理類與對象核心原理

    Java重點梳理類與對象核心原理

    類(class)和對象(object)是兩種以計算機為載體的計算機語言的合稱。對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數(shù)據(jù)類型
    2022-07-07
  • 使用SpringAOP獲取用戶操作日志入庫

    使用SpringAOP獲取用戶操作日志入庫

    這篇文章主要介紹了使用SpringAOP獲取用戶操作日志入庫,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 看動畫學算法之Java實現(xiàn)doublyLinkedList

    看動畫學算法之Java實現(xiàn)doublyLinkedList

    這篇文章主要介紹Java實現(xiàn)doublyLinkedList,LinkedList:doublyLinkedList相對比較復雜,今天就來簡單學習一下doublyLinkedList的基本操作和概,感興趣的小伙伴可以參考下面具體文章內(nèi)容
    2021-10-10
  • JDK10中的局部變量類型推斷var

    JDK10中的局部變量類型推斷var

    這篇文章主要介紹了JDK10中的局部變量類型推斷var,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • java制作簡單的坦克大戰(zhàn)

    java制作簡單的坦克大戰(zhàn)

    坦克大戰(zhàn)是我們小時候玩紅白機時代的經(jīng)典游戲,看到有不少小伙伴都使用各種語言實現(xiàn)了一下,手癢癢,也使用java做的一個比較簡單的坦克大戰(zhàn),主要面向于學過Java的人群,與學了一段時間的人,有利于面向?qū)ο笏枷氲奶岣撸扑]給大家。
    2015-03-03
  • Java實現(xiàn)AES加密和解密方式完整示例

    Java實現(xiàn)AES加密和解密方式完整示例

    這篇文章主要給大家介紹了關于Java實現(xiàn)AES加密和解密方式的相關資料,AES加密為最常見的對稱加密算法,是一種區(qū)塊加密標準,這個標準用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用,需要的朋友可以參考下
    2023-10-10
  • 一文讀懂a(chǎn)va中的Volatile關鍵字使用

    一文讀懂a(chǎn)va中的Volatile關鍵字使用

    volatile關鍵字的作用保證了變量的可見性(visibility)。被volatile關鍵字修飾的變量,如果值發(fā)生了變更,其他線程立馬可見,避免出現(xiàn)臟讀的現(xiàn)象。這篇文章主要介紹了ava中的Volatile關鍵字使用,需要的朋友可以參考下
    2020-03-03
  • Quartz+Spring Boot實現(xiàn)動態(tài)管理定時任務

    Quartz+Spring Boot實現(xiàn)動態(tài)管理定時任務

    最近做項目遇到動態(tài)管理定時任務的需求,剛拿到這個需求還真不知道從哪下手,經(jīng)過一番思考,終于找出實現(xiàn)思路,接下來通過本文給大家介紹了Quartz+Spring Boot實現(xiàn)動態(tài)管理定時任務的相關知識,需要的朋友可以參考下
    2018-09-09
  • Java實現(xiàn)在Word模板指定位置添加二維碼并生成?PDF

    Java實現(xiàn)在Word模板指定位置添加二維碼并生成?PDF

    在實際業(yè)務場景中,我們常常需要在?Word?模板的指定位置貼上二維碼,然后將其轉(zhuǎn)換為?PDF?電子憑證文檔,下面我們就來看看具體實現(xiàn)方法吧
    2025-02-02
  • 使用@RequestParam 綁定List參數(shù)

    使用@RequestParam 綁定List參數(shù)

    這篇文章主要介紹了使用@RequestParam 綁定List參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論

贵溪市| 尚志市| 柯坪县| 繁昌县| 阜康市| 怀化市| 孟连| 马鞍山市| 千阳县| 邹平县| 天全县| 中山市| 玛曲县| 长丰县| 会昌县| 达州市| 绥德县| 白银市| 黑河市| 营口市| 图们市| 建平县| 上高县| 大安市| 桦甸市| 铁岭县| 呼和浩特市| 临洮县| 遵义县| 驻马店市| 武穴市| 沂源县| 文昌市| 左云县| 固镇县| 香港| 洛南县| 平南县| 如皋市| 礼泉县| 电白县|