实现方式其实很简单,主要是用于JAVA中的Uti包下面的zip包中类和方式去实现,
主要实现还是通过流去进行文件压缩:
java.util.zip.ZipEntry
java.util.zip.ZipOutputStream
/**
* 压缩成ZIP 方法1
* @param srcDir 压缩文件夹路径
* @param out 压缩文件输出流
* @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构;
* false: 所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
* @throws RuntimeException 压缩失败会抛出运行时异常
*/
public static void zipCompress(String srcDir, OutputStream out, boolean KeepDirStructure)
throws RuntimeException{
long start = System.currentTimeMillis();
ZipOutputStream zos = null ;
try {
zos = new ZipOutputStream(out);
File sourceFile = new File(srcDir);
compress(sourceFile,zos,sourceFile.getName(),KeepDirStructure);
long end = System.currentTimeMillis();
System.out.println("压缩完成,耗时:" + (end - start) +" ms");
} catch (Exception e) {
throw new RuntimeException("zip error from ZipUtils",e);
}finally{
if(zos != null){
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
创建压缩文件 zip 用于接受压缩文件:
/**
* 创建压缩文件:
* @param zipath
* @throws Exception
*/
public static String createNewzip(String zipath) throws Exception {
ZipOutputStream zoutput = null;
File file = null;
try {
file = new File(zipath);
if(!file.exists())
{
file.createNewFile();
}
FileOutputStream fOutputStream = new FileOutputStream(file);
zoutput = new ZipOutputStream(fOutputStream);
} catch (Exception e) {
e.printStackTrace();
}finally{
zoutput.closeEntry();
zoutput.close();
}
if(null != file){
return file.getPath();
}
return "";
}
测试代码:
String newzip = ZipFileUtils.createNewzip(realPath + "\\" + "待签约合同文件" + ".zip");
FileOutputStream fos1 = new FileOutputStream(new File(newzip));
Test.zipCompress(mrker, fos1,true);
建议生成后删除掉,不然文件会一直创建,如果是线上的话,还要有创建文件的权限,不然代码就不能执行,会出现创建文件没有权限的错误,本地的没有问题