用java给pdf压缩并加密_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 < filePath.size(); i++) {//遍历压缩文件数据
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++;//压缩成功文件数量+1
} else {
failFile.add(file.getPath());
failCount++;//压缩失败文件数量+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);//创建压缩路径
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 {
// 输入流 --> 从一个目标读取数据
// 输出流 --> 向一个目标写入数据
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多文件压缩加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
用java给pdf压缩并加密_Java实现多文件压缩加密并重命名压缩文件对象的方法相关推荐
- Java实现pdf加盖骑缝章_Java 在PDF中添加骑缝章示例解析
骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java ...
- java getbean方法_java相关:spring中通过ApplicationContext getBean获取注入对象的方法实例...
java相关:spring中通过ApplicationContext getBean获取注入对象的方法实例 发布于 2020-12-19| 复制链接 分享一篇关于关于spring中通过Applicat ...
- java 取pdf表格内容数据_Java 在PDF中添加表格
本文将介绍通过Java编程在PDF文档中添加表格的方法.添加表格时,可设置表格边框.单元格对齐方式.单元格背景色.单元格合并.插入图片.设置行高.列宽.字体.字号等. 使用工具:Free Spire. ...
- java生成pdf不支持中文_java生成pdf以及解决中文中文乱码问题
[在网上搜了一下iText的东东,简单的整理了一个Demo,解决了中文乱码问题,这里不贴链接了 网上搜一下就行了package com.westdream.test;import java.io.Fi ...
- java写pdf中文不显示_java – iText pdf在使用NOTO字体或Source Hans时不显示中文字符...
我正在尝试使用NOTO字体( https://www.google.com/get/noto/)来显示中文字符.这是我的示例代码,来自iText的修改示例代码. public void createP ...
- java web pdf 打印预览_java原装代码完成pdf在线预览和pdf打印及下载
前提准备: 1. 项目中至少需要引入的jar包,注意版本: a) core-renderer.jar b) freemarker-2.3.16.jar c) iText-2.0.8.jar d) iT ...
- Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...
本文实例讲述了java数据结构之链表.栈.队列.树的实现方法.分享给大家供大家参考,具体如下: 最近无意中翻到一本书,闲来无事写几行代码,实现几种常用的数据结构,以备后查. 一.线性表(链表) 1.节 ...
- java配置文件放置到jar外_java相关:Spring Boot 把配置文件和日志文件放到jar外部...
java相关:Spring Boot 把配置文件和日志文件放到jar外部 发布于 2020-3-6| 复制链接 如果不想使用默认的application.properties,而想将属性文件放到jar ...
- JAVA实现PDF无损转WORD
JAVA实现PDF转word,全网最详细,描述最准确 写在前面, 此方法实现PDF转word,格式无损,但是,转换后的word不可编辑 开始 废话不多说,直接上代码 package com.examp ...
- java什么是反射 代码说明_java编程中,常提到的反射代码指的是什么?
展开全部 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态e5a48de588b662616964757a686964616f31333335326232或行 ...
最新文章
- 修改系统路径 linux,Linux修改sudo的PATH路径的解决方法
- 在Python中使用SMTP发送电子邮件
- Android --- 漂亮的 Loader 加载动画
- tab in English
- SpringBoot注解大全
- sql server java类型_使用基本 JDBC 数据类型 - SQL Server | Microsoft Docs
- python数据分析与挖掘 | 挖掘建模
- web应用的目录结构
- 一般一个前端项目完成需要多久_一种按周迭代的敏捷式项目管理方法
- BZOJ 1529: [POI2005]ska Piggy banks( 并查集 )
- Linux下如何同时启动多个Tomcat服务器
- IBM押宝比特币 开始测试交易软件块链
- Flex+BlazeDS+Java项目只能使用localhost访问的问题
- windows进程间通信
- vscode自动整理代码_再见了, VS Code!
- 冲顶大会/芝士超人/花椒直播...答题助手
- 96K的3d FPS游戏-毁灭杀手(kkrieger)
- PHP将PPT文件转成图片
- XSS漏洞利用---PHPMyWind 任意密码重置漏洞
- Android中删除EditText中内容时报SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length