日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

用java给pdf压缩并加密_Java实现多文件压缩加密并重命名压缩文件对象的方法

發(fā)布時間:2023/12/20 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用java给pdf压缩并加密_Java实现多文件压缩加密并重命名压缩文件对象的方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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 {

/**

* 復(fù)制壓縮文件路徑 ps:此路徑必須為空文件夾,在壓縮完成后此文件夾將被清空目錄

*/

private static String copyPath = "c:/Users/Administrator/Desktop/壓縮測試/壓縮測試作業(yè)復(fù)制";

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文件,并以指定密碼加密,若密碼為空,則不進(jìn)行加密保護(hù)

* @Author: 張慶裕

* @Date: 2021/01/04

*/

//@RequestMapping("/fileCompression/list")

public String zipFilesAndEncrypt(List filePath, List fileRename, String password) {

/**

* 壓縮成功的文件數(shù)量

*/

int successCount = 0;

/**

* 壓縮失敗的文件數(shù)量

*/

int failCount = 0;

/**

* 返回數(shù)據(jù)

*/

JSONObject ob = new JSONObject();

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

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

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

//創(chuàng)建復(fù)制文件夾

File folder = new File(copyPath);

if(!folder.exists()){//如果文件夾不存在

boolean mkdir = folder.mkdir();//創(chuàng)建文件夾

if(!mkdir){//系統(tǒng)未找到該路徑

throw new RuntimeException("復(fù)制文件路徑出錯,請修改復(fù)制文件夾路徑");

}

}else{//文件夾存在

File[] listFiles = folder.listFiles();

if(listFiles.length > 0){//如何文件夾下存在目錄則,停止壓縮,防止刪除其他文件

throw new RuntimeException("復(fù)制的文件夾不為空,請選擇空文件夾!");

}

}

for (int i = 0; i < filePath.size(); i++) {//遍歷壓縮文件數(shù)據(jù)

File file = filePath.get(i);//獲取原文件

if (!file.exists()) {//防止文件異常,首先再次確認(rèn)文件路徑是否存在

// 文件不存在

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());

//先復(fù)制文件

File newName = new File(copyPath + "/" + file.getName());

try {

copyFile(oldName, newName);

} catch (Exception e) {

e.printStackTrace();

}

//String path = newName.getPath();//獲取復(fù)制文件的路徑

String parentPath = newName.getParent();//獲取復(fù)制出來的文件的父級目錄

String reName = fileRename.get(i);//獲取重命名的名稱

newName.renameTo(new File(parentPath + "/" + reName));//重命名復(fù)制出來的文件

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);//壓縮方式

//設(shè)置壓縮級別

//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);//設(shè)置壓縮文件加密

parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);//加密方式

parameters.setPassword(password);//設(shè)置加密密碼

}

ZipFile zipFile = new ZipFile(zipPath);//創(chuàng)建壓縮路徑

zipFile.setFileNameCharset("gbk");//設(shè)置壓縮編碼

zipFile.addFiles(filesToAdd, parameters);//添加壓縮文件并進(jìn)行加密壓縮

//壓縮完成后清空復(fù)制的文件目錄

deleteDir(copyPath);

ob.put("zipPath", zipPath);

ob.put("successCount", successCount);

ob.put("failCount", failCount);

} catch (ZipException e) {

//清空復(fù)制的文件目錄

deleteDir(copyPath);

ob.put("unKnown", "未知異常,壓縮失敗!");

System.out.println("文件壓縮出錯");

e.printStackTrace();

}

return ob.toString();

}

/**

* @Description: 文件復(fù)制

* @Param: resource 原文件路徑

* @Param: target 新文件路徑

* @return:

* @Author: 張慶裕

* @Date: 2021/1/6

*/

public void copyFile(File resource, File target) throws Exception {

// 輸入流 --> 從一個目標(biāo)讀取數(shù)據(jù)

// 輸出流 --> 向一個目標(biāo)寫入數(shù)據(jù)

long start = System.currentTimeMillis();

// 文件輸入流并進(jìn)行緩沖

FileInputStream inputStream = new FileInputStream(resource);

BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

// 文件輸出流并進(jìn)行緩沖

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();

//關(guān)閉流

bufferedInputStream.close();

bufferedOutputStream.close();

inputStream.close();

outputStream.close();

long end = System.currentTimeMillis();

System.out.println("復(fù)制文件:" + resource.getPath() + " 成功 耗時:" + (end - start) / 1000 + " s");

}

/**

* @Description: 清空復(fù)制壓縮文件下的內(nèi)容

* @Param: path 復(fù)制文件夾的路徑

* @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();//取得當(dāng)前目錄下所有文件和文件夾

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 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";//加密密碼

//請在單元測試進(jìn)行測試, 或者將方法改為 static 方法

//String result = zipFilesAndEncrypt(filePath, fileRename, password);

//System.out.println(result);

}

}

效果如下:

到此這篇關(guān)于Java實現(xiàn)多文件壓縮加密并重命名壓縮文件對象的方法的文章就介紹到這了,更多相關(guān)java多文件壓縮加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

總結(jié)

以上是生活随笔為你收集整理的用java给pdf压缩并加密_Java实现多文件压缩加密并重命名压缩文件对象的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。