• Java 解压文件


    maven库:

    1. <!--FileUtil、ZipUtil 依赖-->
    2. <dependency>
    3. <groupId>cn.hutool</groupId>
    4. <artifactId>hutool-all</artifactId>
    5. <version>5.3.1</version>
    6. </dependency>
    7. <!--IOUtils 依赖-->
    8. <dependency>
    9. <groupId>commons-io</groupId>
    10. <artifactId>commons-io</artifactId>
    11. <version>2.11.0</version>
    12. </dependency>
    13. <!--MockMultipartFile 依赖-->
    14. <dependency>
    15. <groupId>org.springframework</groupId>
    16. <artifactId>spring-test</artifactId>
    17. <version>5.0.5.RELEASE</version>
    18. </dependency>
    19. <!--MultipartFile 依赖-->
    20. <dependency>
    21. <groupId>org.springframework</groupId>
    22. <artifactId>spring-web</artifactId>
    23. <version>5.1.8.RELEASE</version>
    24. </dependency>

    代码:

    1. import cn.hutool.core.io.FileUtil;
    2. import cn.hutool.core.util.ZipUtil;
    3. import org.apache.commons.io.IOUtils;
    4. import org.springframework.mock.web.MockMultipartFile;
    5. import org.springframework.web.multipart.MultipartFile;
    6. import java.io.File;
    7. import java.io.FileInputStream;
    8. import java.io.IOException;
    9. import java.io.InputStream;
    10. import java.nio.charset.Charset;
    11. import java.nio.charset.StandardCharsets;
    12. import java.util.ArrayList;
    13. import java.util.List;
    14. public class Test {
    15. public static void main(String[] args) throws IOException {
    16. //生成File文件
    17. File file = new File("H:\\testFile\\123.zip");
    18. //File文件转MultipartFile
    19. FileInputStream input = new FileInputStream(file);
    20. MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(input));
    21. //pdf文件名称
    22. List<String> pdfName = new ArrayList<>();
    23. //multipartFileList--存储解压后的,pdf文件
    24. List<MultipartFile> multipartFileList = new ArrayList<>();
    25. //设置解压后文件的临时路径
    26. String destDirPath = FileUtil.getTmpDirPath() + "/standardFile/" + +System.nanoTime() + "/";
    27. try {
    28. //解压文件
    29. List<File> files = parseMainTextZip(multipartFile, destDirPath);
    30. System.out.println("解压文件个数:"+ files.size());
    31. for (File filePdf : files) {
    32. InputStream inputStream = new FileInputStream(filePdf);
    33. MultipartFile multipartFileTmp = new MockMultipartFile("file", filePdf.getName(), "text/plain", IOUtils.toByteArray(inputStream));
    34. //multipartFileList--存储解压后的,pdf文件
    35. multipartFileList.add(multipartFileTmp);
    36. String pdfNameStr = filePdf.getName();
    37. pdfName.add(pdfNameStr.substring(0, pdfNameStr.length() - 4));
    38. inputStream.close();
    39. }
    40. }catch (Exception e) {
    41. e.printStackTrace();
    42. } finally {
    43. //删除临时路径中解压后的文件
    44. FileUtil.del(destDirPath);
    45. }
    46. //处理解压后的文件--multipartFileList
    47. for (MultipartFile filePdf : multipartFileList) {
    48. String originalFilepdf = filePdf.getOriginalFilename();
    49. if (originalFilepdf.endsWith("pdf")) {
    50. originalFilepdf = originalFilepdf.substring(0, originalFilepdf.length() - 4);
    51. System.out.println("文件名称为:"+originalFilepdf);
    52. }
    53. }
    54. }
    55. //解压文件
    56. private static List<File> parseMainTextZip(MultipartFile mainTextFile, String destDirPath) throws Exception {
    57. if (!FileUtil.exist(destDirPath)) {
    58. //创建解压后的目录
    59. createDirectory(destDirPath);
    60. }
    61. String tmpFilePath = destDirPath + mainTextFile.getOriginalFilename();
    62. File fromStream = FileUtil.writeFromStream(mainTextFile.getInputStream(), tmpFilePath);
    63. File zipFile;
    64. try {
    65. zipFile = ZipUtil.unzip(fromStream.getAbsolutePath(), destDirPath, Charset.forName("GBK"));
    66. } catch (Exception e) {
    67. zipFile = ZipUtil.unzip(fromStream.getAbsolutePath(), destDirPath, StandardCharsets.UTF_8);
    68. }
    69. List<File> extractedFileList = FileUtil.loopFiles(zipFile, file -> !file.getName().endsWith("zip"));
    70. return extractedFileList;
    71. }
    72. /**
    73. * 创建目录
    74. *
    75. * @param descDirName 目录名,包含路径
    76. * @return 如果创建成功,则返回true,否则返回false
    77. */
    78. public static boolean createDirectory(String descDirName) {
    79. String descDirNames = descDirName;
    80. if (!descDirNames.endsWith(File.separator)) {
    81. descDirNames = descDirNames + File.separator;
    82. }
    83. File descDir = new File(descDirNames);
    84. if (descDir.exists()) {
    85. System.out.println("目录 " + descDirNames + " 已存在!");
    86. return false;
    87. }
    88. // 创建目录
    89. if (descDir.mkdirs()) {
    90. System.out.println("目录 " + descDirNames + " 创建成功!");
    91. return true;
    92. } else {
    93. System.out.println("目录 " + descDirNames + " 创建失败!");
    94. return false;
    95. }
    96. }
    97. }

    文件目录:

    压缩包为"123.zip":

    运行结果:

  • 相关阅读:
    【网络编程】传输层——UDP协议
    微信小程序 通过 pageScrollTo 滚动到界面指定位置
    10、Python函数命名空间、作用域(LEGB)及Global
    Java实现树形结构和递归查询
    【算法】用动态规划求解背包问题
    Linux Shell脚本:从文件中读取文件路径并以相同目录结构复制到当前目录
    Three 材质纹理 (总结三)
    【Arduino31】LED与步进电机实验
    Springboot踩坑-request body重复读问题
    Mybatis-Plus如何使用
  • 原文地址:https://blog.csdn.net/zhuiqiuzhuoyue583/article/details/134512774