欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

javaZipFile如何将多级目录压缩,

来源: javaer 分享于  点击 8574 次 点评:80

javaZipFile如何将多级目录压缩,


目录
  • java ZipFile将多级目录压缩
    • 一个例子
    • 步骤解析
  • Java多级目录导出文件压缩包
    • 总结

      java ZipFile将多级目录压缩

      在 Java 中,可以使用 java.util.zip 包中的 ZipOutputStream 和 ZipEntry 类来压缩多级目录。

      一个例子

      展示如何递归地将一个目录及其所有子目录和文件压缩到一个 ZIP 文件中:

      import java.io.*;
      import java.nio.file.*;
      import java.util.zip.*;
      
      public class ZipDirectory {
          public static void main(String[] args) throws IOException {
              String sourceDirPath = "path/to/source/directory";
              String zipFilePath = "path/to/output.zip";
      
              try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
                  Path sourceDir = Paths.get(sourceDirPath);
                  Files.walk(sourceDir)
                       .filter(path -> !Files.isDirectory(path))
                       .forEach(path -> {
                            ZipEntry zipEntry = new ZipEntry(sourceDir.relativize(path).toString());
                            try {
                                zipOut.putNextEntry(zipEntry);
                                Files.copy(path, zipOut);
                                zipOut.closeEntry();
                            } catch (IOException e) {
                                System.err.println("Failed to add file to ZIP: " + path);
                                e.printStackTrace();
                            }
                       });
              }
          }
      }

      这个程序将遍历指定目录(包括子目录)的所有文件,并将它们添加到 ZIP 文件中。

      步骤解析

      • 使用 Files.walk 方法递归遍历源目录。
      • 对于每个非目录文件,创建一个相对路径的 ZipEntry。
      • 将文件内容复制到 ZipOutputStream。

      请根据实际情况替换 sourceDirPath 和 zipFilePath。此外,请确保适当处理异常并关闭资源以避免资源泄漏。

      Java多级目录导出文件压缩包

                      //创建临时文件
                      File zipFile = File.createTempFile("test", ".zip");
                      Path temp = Files.createTempDirectory(null);
                      String srcImgPath = temp.toString();
       
                      for( 循环 ){
                           String outImgPath = srcImgPath + "/aa/bb/cc";
                           File outImgFile = new File(outImgPath);
                           //如果文件夹不存在则创建
                           if (!outImgFile.exists() && !outImgFile.isDirectory()) {
                                  outImgFile.mkdirs();
                           }
                          FileOutputStream outImgStream = new FileOutputStream(outImgPath + "/" + name);
                          ImageIO.write(bufImg, imgSuffix, outImgStream);
                          outImgStream.flush();
                          outImgStream.close();
                      }
       
                      ZipUtil.zip(srcImgPath, zipFile.getAbsolutePath(), true);
       
                      String header = request.getHeader("User-Agent").toUpperCase();
                      String fileName = "附件信息" + System.currentTimeMillis() + ".zip";
                      if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
                          fileName = URLEncoder.encode(fileName, "utf-8");
                          //IE下载文件名空格变+号问题
                          fileName = fileName.replace("+", "%20");
                      } else {
                          fileName = new String(fileName.getBytes(), "ISO8859-1");
                      }
                      response.reset();
                      response.setContentType("text/plain");
                      response.setContentType("application/octet-stream; charset=utf-8");
                      response.setHeader("Location", fileName);
                      response.setHeader("Cache-Control", "max-age=0");
                      response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
       
                      FileInputStream fis = new FileInputStream(zipFile);
                      BufferedInputStream buff = new BufferedInputStream(fis);
                      BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
                      byte[] car = new byte[1024];
                      int l = 0;
                      while (l < zipFile.length()) {
                          int j = buff.read(car, 0, 1024);
                          l += j;
                          out.write(car, 0, j);
                      }
                      // 关闭流
                      fis.close();
                      buff.close();
                      out.close();
                      // 删除临时文件
                      zipFile.delete();
                      FileUtil.deleteDir(srcImgPath);

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

      您可能感兴趣的文章:
      • 如何解决java.util.zip.ZipFile解压后被java占用问题
      • Java解析zip文件,并识别压缩包里面的文件转换成可操作的IO流方式
      • Java使用Tinify实现图片无损压缩(4M无损压缩到1M)的方法
      • 通过Java实现zip文件与rar文件解压缩的详细步骤
      • Java如何生成压缩文件工具类
      相关栏目:

      用户点评