两种实现方式:
- java.util.zip.ZipOutputStream
- org.apache.tools.ant
注意
最初采用java.util.zip.ZipOutputStream的方式,
jdk为1.8,出现BUG:
一定情况下,会将空文件夹变成文件格式,如:
空目录:鉴定人资格 鉴定人资格证书 鉴定人资格证身份证 文件夹都变成文件了
空目录:鉴定资格证书 鉴定人资格证书啊 都是没问题的
最终改为使用:org.apache.ant 依赖包,得以解决
org.apache.ant 方式
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.10.8</version>
</dependency>
public class ZipApacheUtil {
private File zipFile;
/**
* 压缩文件构造函数
* @param finalFile 最终压缩生成的压缩文件:目录+压缩文件名.zip
*/
public ZipApacheUtil(String finalFile) {
zipFile = new File(finalFile);
}
/**
* 执行压缩操作
* @param srcPathName 需要被压缩的文件/文件夹
*/
public void compressExe(String srcPathName) {
File srcdir = new File(srcPathName);
if (!srcdir.exists()){
throw new RuntimeException(srcPathName + "不存在!");
}
Project prj = new Project();
Zip zip = new Zip();
zip.setProject(prj);
zip.setDestFile(zipFile);
FileSet fileSet = new FileSet();
fileSet.setProject(prj);
fileSet.setDir(srcdir);
//fileSet.setIncludes("**/*.java"); //包括哪些文件或文件夹 eg:zip.setIncludes("*.java");
//fileSet.setExcludes(...); //排除哪些文件或文件夹
zip.addFileset(fileSet);
zip.execute();
}
}
java.util.zip.ZipOutputStream方式
public final class ZIPUtil {
private ZIPUtil() {
}
/**
* 压缩成ZIP 方法 * @param srcDir 压缩文件夹路径
*
* @param out 压缩文件输出流
* @param keepDirStructure 是否保留原来的目录结构,true:保留目录结构;
*