java对多个文件的压缩

tech2022-11-02  131

package com.chuangqi.tools; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * \* Created with IntelliJ IDEA. * \* @author: xiyue * \* Date: 2020/6/3 * \* Time: 14:53 * \* To change this template use File | Settings | File Templates. * \* Description: * \ */ public class ZipUtils { public static void zipDir(String directoryName, ZipOutputStream zos, String basePath) { /** * 该方法递归实现将多个文件夹压缩在同一个zip包中 然后删除文件夹directoryName 下需要被压缩的文件。 * @param directoryName 文件夹路径 * @param zos 压缩流 ZipOutputStream 确定压缩包生成的位置 * @param basePath 用于传给 ZipEntry 用于压缩包分文件夹第一级传入可以为"" * @throws IOException */ File file = new File(directoryName); // 每一级别的递归 basePath 不应该被改变所以添加一个 参数 copyBasePath String copyBasePath =""; if (file.exists()) { File[] fileList = file.listFiles(); for (File f : fileList) { if (f.isDirectory()) { // 拼接文件夹目录 if (!"".equals(basePath)) { copyBasePath = basePath+ File.separator+f.getName(); } else { copyBasePath = f.getName(); } // 继续递归文件夹 zipDir(directoryName + File.separator + f.getName(), zos, copyBasePath); } else { // 压缩单个文件到 zos String zipName; if (!"".equals(basePath)) { zipName = basePath + File.separator + f.getName(); } else { zipName = f.getName(); } try { // zos.putNextEntry 开始添加压缩文件 ZipEntry传入的参数 zipName如果包含了层级关系就会生成文件夹 zos.putNextEntry(new ZipEntry(zipName)); int len; FileInputStream is = new FileInputStream(f); byte[] bytes = new byte[1024]; while ((len = is.read(bytes)) != -1) { zos.write(bytes, 0, len); } zos.flush(); // zos.closeEntry() 结束当前压缩文件的添加 zos.closeEntry(); is.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } } } }
最新回复(0)