开发者

java ZipFile如何将多级目录压缩

目录
  • 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多级目录导出文件压缩包

       js               //创建临时文件
                      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.containswww.devze.com("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);
                python      }
                      // 关android闭流
                      fis.close();
                      buff.close();
                      out.close();
                      // 删除临时文件
                      zipFile.delete();
                      FileUtil.deleteDir(srcImgPath);

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜