因为项目采用obs文件存储,导致同名文件会被覆盖,所以采用后台根据时间戳重命名的方式,别的文件类型都没有问题,到zip的时候,发现解压后的文件名还是重命名之前的文件名,所以要实现zip文件里面的文件夹也改为新的命名。

一开始的设想是有没有方法能够在不解压的情况下实现,无奈没有找到,有知道的小伙伴可以指点一下。于是只能使用常规的思路,先解压,重命名,再加压的方式。

项目使用zip4j完成解压、加压操作,需要在pom.xml中添加

<dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version>
</dependency>

一、文件保存到临时地址

因为项目使用的MultipartFile接受文件,所以要先转为File,并存放到临时地址

String zipName = multipartFile.getOriginalFilename();
String path = getPath();
System.out.println(path);
File file = new File(path + zipName);
System.out.println(file);
if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();
}
multipartFile.transferTo(file);/**
* 获取不同环境文件存放地址
**/
public static String getPath() {String env = ProfileUtil.getActiveProfile();String path = null;if (env.equals("dev")) {path = "Windows环境地址";} else {path = "服务器文件存放地址";}return path;
}

二、解压

String newFoldel = "自定义新文件名";
ZipFile zFile = new ZipFile(file);
zFile.setFileNameCharset("gbk");
String dest = path + newFoldel;
File destDir = new File(dest);
zFile.extractAll(dest);

三、重命名

file自带的renameTo可以进行重命名文件夹

String orgFoldel = multipartFile.getOriginalFilename().substring(0, multipartFile.getOriginalFilename().lastIndexOf("."));
File file1 = new File((path + newFoldel + "/" + orgFoldel));
file1.renameTo(new File(path + newFoldel + "/" + newFoldel));

四、压缩并转为MultipartFile

ZipFile newZipFile = fastZip(path, newFoldel + ".zip", path + newFoldel);File newFile = new File(path, newFoldel + ".zip");
FileInputStream fileInputStream = new FileInputStream(newFile);
MultipartFile newMultipartFile = new MockMultipartFile(newFile.getName(), newFile.getName(),ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);/*** zip4j压缩目录为一个zip包* <p>* 同一路径多次压缩只会生成一个zip包* 返回null表示压缩失败,* 返回ZipFile对象表示压缩成功。** @param productZipDir    生成的zip包存放路径 (d:\\xxx\\xx\\)* @param productZipName   生成的zip包名 (xxx.zip)* @param originalDestPath 要压缩的原始目录地址(e:\\xxx\\xx\\)* @throws ZipException*/
public static ZipFile fastZip(String productZipDir, String productZipName, String originalDestPath) throws ZipException {if (StringUtils.isEmpty(productZipDir)) {return null;}if (StringUtils.isEmpty(productZipName)) {return null;}if (StringUtils.isEmpty(originalDestPath)) {return null;}//zip包存放路径 不存在则建立File productDir = new File(productZipDir);if (!productDir.exists()) {productDir.mkdirs();}//要压缩的原始目录地址 不存在则返回nullFile originalPath = new File(originalDestPath);if (!originalPath.isDirectory()) {return null;}if (!originalPath.exists()) {return null;}// 生成的压缩文件ZipFile zipFile = new ZipFile(productZipDir + productZipName);ZipParameters parameters = new ZipParameters();// 压缩方式 8parameters.setCompressionMethod(8);// 压缩级别 5parameters.setCompressionLevel(5);// 要打包的文件夹File currentFile = new File(originalDestPath);File[] fs = currentFile.listFiles();// 遍历originalDestPath文件夹下所有的文件、文件夹for (File f : fs) {if (f.isDirectory()) {zipFile.addFolder(new File(f.getPath()), parameters);} else {zipFile.addFile(f, parameters);}}//返回zip包对象return zipFile;
}

五、删除临时文件

public static boolean deleteFile(String fileName) {File file = new File(fileName);// 如果文件路径只有单个文件if (file.exists() && file.isFile()) {if (file.delete()) {System.out.println("删除文件" + fileName + "成功!");return true;} else {System.out.println("删除文件" + fileName + "失败!");return false;}} else {System.out.println(fileName + "不存在!");return false;}
}public static boolean deleteAllFile(String dir) {// 如果dir不以文件分隔符结尾,自动添加文件分隔符File dirFile = new File(dir);// 如果dir对应的文件不存在,或者不是一个目录,则退出if ((!dirFile.exists()) || (!dirFile.isDirectory())) {System.out.println("删除文件夹失败:" + dir + "不存在!");return false;}boolean flag = true;// 删除文件夹中的所有文件包括子文件夹File[] files = dirFile.listFiles();for (int i = 0; i < files.length; i++) {// 删除子文件if (files[i].isFile()) {flag = deleteFile(files[i].getAbsolutePath());if (!flag)break;}// 删除子文件夹else if (files[i].isDirectory()) {flag = deleteAllFile(files[i].getAbsolutePath());if (!flag)break;}}if (!flag) {System.out.println("删除文件夹失败!");return false;}// 删除当前文件夹if (dirFile.delete()) {System.out.println("删除文件夹" + dir + "成功!");return true;} else {return false;}
}

六、完整代码

ZipUtils.java

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import org.apache.http.entity.ContentType;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class ZipUtils {public static MultipartFile decZip(String apiName, MultipartFile multipartFile) throws IOException, ZipException {String zipName = multipartFile.getOriginalFilename();String path = getPath();System.out.println(path);File file = new File(path + zipName);System.out.println(file);if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}multipartFile.transferTo(file);//解压String newFoldel = "自定义文件夹名称";ZipFile zFile = new ZipFile(file);zFile.setFileNameCharset("gbk");String dest = path + newFoldel;File destDir = new File(dest);zFile.extractAll(dest);//重命名String orgFoldel = multipartFile.getOriginalFilename().substring(0, multipartFile.getOriginalFilename().lastIndexOf("."));File file1 = new File((path + newFoldel + "/" + orgFoldel));file1.renameTo(new File(path + newFoldel + "/" + newFoldel));//压缩ZipFile newZipFile = fastZip(path, newFoldel + ".zip", path + newFoldel);File newFile = new File(path, newFoldel + ".zip");FileInputStream fileInputStream = new FileInputStream(newFile);MultipartFile newMultipartFile = new MockMultipartFile(newFile.getName(), newFile.getName(),ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);return newMultipartFile;}/*** zip4j压缩目录为一个zip包* <p>* 同一路径多次压缩只会生成一个zip包* 返回null表示压缩失败,* 返回ZipFile对象表示压缩成功。** @param productZipDir    生成的zip包存放路径 (d:\\xxx\\xx\\)* @param productZipName   生成的zip包名 (xxx.zip)* @param originalDestPath 要压缩的原始目录地址(e:\\xxx\\xx\\)* @throws ZipException*/public static ZipFile fastZip(String productZipDir, String productZipName, String originalDestPath) throws ZipException {if (StringUtils.isEmpty(productZipDir)) {return null;}if (StringUtils.isEmpty(productZipName)) {return null;}if (StringUtils.isEmpty(originalDestPath)) {return null;}//zip包存放路径 不存在则建立File productDir = new File(productZipDir);if (!productDir.exists()) {productDir.mkdirs();}//要压缩的原始目录地址 不存在则返回nullFile originalPath = new File(originalDestPath);if (!originalPath.isDirectory()) {return null;}if (!originalPath.exists()) {return null;}// 生成的压缩文件ZipFile zipFile = new ZipFile(productZipDir + productZipName);ZipParameters parameters = new ZipParameters();// 压缩方式 8parameters.setCompressionMethod(8);// 压缩级别 5parameters.setCompressionLevel(5);// 要打包的文件夹File currentFile = new File(originalDestPath);File[] fs = currentFile.listFiles();// 遍历originalDestPath文件夹下所有的文件、文件夹for (File f : fs) {if (f.isDirectory()) {zipFile.addFolder(new File(f.getPath()), parameters);} else {zipFile.addFile(f, parameters);}}//返回zip包对象return zipFile;}public static boolean deleteFile(String fileName) {File file = new File(fileName);// 如果文件路径只有单个文件if (file.exists() && file.isFile()) {if (file.delete()) {System.out.println("删除文件" + fileName + "成功!");return true;} else {System.out.println("删除文件" + fileName + "失败!");return false;}} else {System.out.println(fileName + "不存在!");return false;}}public static boolean deleteAllFile(String dir) {File dirFile = new File(dir);// 如果dir对应的文件不存在,或者不是一个目录,则退出if ((!dirFile.exists()) || (!dirFile.isDirectory())) {System.out.println("删除文件夹失败:" + dir + "不存在!");return false;}boolean flag = true;// 删除文件夹中的所有文件包括子文件夹File[] files = dirFile.listFiles();for (int i = 0; i < files.length; i++) {// 删除子文件if (files[i].isFile()) {flag = deleteFile(files[i].getAbsolutePath());if (!flag)break;}// 删除子文件夹else if (files[i].isDirectory()) {flag = deleteAllFile(files[i].getAbsolutePath());if (!flag)break;}}if (!flag) {System.out.println("删除文件夹失败!");return false;}// 删除当前文件夹if (dirFile.delete()) {System.out.println("删除文件夹" + dir + "成功!");return true;} else {return false;}}public static String getPath() {String env = ProfileUtil.getActiveProfile();String path = null;if (env.equals("dev")) {path = "开发环境地址";} else {path = "运营环境地址";}return path;}
}

JAVA SpringBoot zip文件夹重命名相关推荐

  1. php文件夹重命名,PHP重命名和移动目录

    PHP重命名目录 使用PHP的rename()函数可以重命名目录. 如果rename()函数执行成功,则返回true,否则返回false. 复制代码 PHP重命名目录示例-www.baike369.c ...

  2. 如何将多个文件夹重命名

    当你有很多同项目的文件夹需要整理打包给甲方,但是文件夹的名称由于当时没有统一命名,非常的杂乱不好查阅.这种情况很多时候就出现在项目中后期,那如何将多个文件夹重命名的又快又便捷呢?通过多年的职场工作经验 ...

  3. mac文件夹怎么重命名?苹果电脑文件夹重命名快捷键

    windows系统下给文件夹重命名相信很多朋友都很熟悉,那么Mac OS系统怎么给文件重命名呢,相信很多刚刚入手Mac OS系统的亲们都会有次疑问,下面小编告诉你Mac OS系统的文件夹到底要怎样才能 ...

  4. Mac中文件夹重命名快捷键

    如何Mac中文件夹重命名快捷键,在Windows7上选择文件夹直接F2就可重命名 Mac中选中文件,再按 回车键键  可重命名文件夹名

  5. autojs实现的百度云网盘登录上传下载创建文件夹重命名删除文件等功能

    说明 本文提供的代码仅供参考.不建议用于生产环境. 可能有些地方在最新版本的Auto.js上面需要做修改,才能运行. Auto.js简介 Auto.js是利用安卓系统的"辅助功能" ...

  6. C++ Qt C#文件夹重命名 C#复制文件(夹)

    一.C++文件夹重命名方法: 使用MoveFile()方法即可,源文件夹名字和目标文件夹名字都需要完整的路径名称 if (g_oCamera[0].strCodedData != _T("& ...

  7. 想快速给文件夹重命名就这样做

    很多小伙伴们都有为桌面上一大堆未命名的文件感到头疼的情况,桌面乱糟糟的,工作起来也会很烦躁,那今天小编就来给大家分享一个可以快速给文件夹重命名的简单操作. 首先打开浏览器搜索"固乔科技&qu ...

  8. 本地账户用户文件夹重命名

    本地账户用户文件夹重命名 前提说明:这么做有个 bug -- 任务管理器 → 用户 下显示的名称还是最原始的用户名 在最后有解决办法!!!** 建议:手机查看文档,电脑操作!!!!!!!!!! 进入管 ...

  9. linux 把一个文件夹重命名后,移动到另外一个文件夹下

    linux 把一个文件夹重命名后,移动到另外一个文件夹下 mv /ssd1/AAA/PBMC_rat/RAT/index /ssd1/zhihengfeng/PBMC_rat/star

最新文章

  1. c#加粗代码_RichTextBox,怎么用c#代码根据Index和Length指定的范围的内容进行变色或加粗处理?...
  2. 基于python物流管理系统毕业设计-Python程序设计实验报告八:文件
  3. mysql数据库运行远程用户访问不了_MySQL数据库远程访问权限如何打开(两种方法)...
  4. eclipse的SVN插件设置忽略文件
  5. 关于IE无法打开flex程序的问题
  6. 如何使用线程完成售票系统
  7. @Bean和@Componet区别
  8. 看雷诺公司如何使用质量工具提高功能安全相关模型软件开发效率
  9. 与孩子一起学编程04章
  10. Linux实验报告一【 下载配置搜狗安装包16.04】
  11. 你该不会不知道,web自动化测试中的八大定位方法吧!
  12. bs 网站获取电子秤重量方案
  13. 许怡然:网游创业失败全攻略
  14. 【风光摄影】用滤镜在前期控制完美光比
  15. 揭露强奸犯的黑客被判有罪?审视CFAA计算机欺诈法
  16. HttpGet和HttpPost的区别
  17. CKA考试习题:安全管理--Network Policy、serviceaccount、clusterrole
  18. SpringBoot 定时任务的实现
  19. pytorch lightning
  20. 干货分享—Niushop数据库配置

热门文章

  1. 基于Android的备忘录软件,基于Android的手机备忘录软件设计
  2. reflow(重排、回流)和repaint(重绘)
  3. AltiumDesigner16\Quartus13\Labview2017\Matlab安装包网盘
  4. Windows 系统-桌面管理
  5. 库存分析与控制课后习题
  6. 史上最污的技术解读,我竟然秒懂了(下)
  7. python获取视频帧率,总帧数,分辨率等视频信息
  8. 网易云音乐真的是随机播放吗
  9. Sketch哪个版本好用?
  10. Windows 10 下 C 盘清理的四个最好办法 | 安全简单,无需插件 | C 盘快满了,如何清理 C 盘? | win 10 OS盘清理