pp一.调用主方法填入参数
/**
*stayPath:压缩文件地址
*compressPath:压缩后存储地址
*true/false:是否在压缩文件里创建目录,仅在压缩文件为目录时有效,如果为false,将直接压缩目录下文件
* 到压缩文件.
*passwd:压缩使用的密码
***/
ZipUtil.zip( stayPath,compressPath,true,passwd);
二.引入pom文件
<dependency>
<groupId>net.lingala</groupId>
<artifactId>zip4j</artifactId>
<version>1.3.3</version>
</dependency>
三.压缩主要方法
package cn.com.goldwind.ercp.fems.business.deliverables.service;
import java.io.File;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import org.apache.commons.lang3.StringUtils;
/**
* 压缩文件夹成zip格式
*
* */
public class ZipUtil {
/**
* 使用给定密码压缩指定文件或文件夹到指定位置.
* <p>
* dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者"".<br />
* 如果传null或者""则将压缩文件存放在当前目录,即跟源文件同目录,压缩文件名取源文件名,以.zip为后缀;<br />
* 如果以路径分隔符(File.separator)结尾,则视为目录,压缩文件名取源文件名,以.zip为后缀,否则视为文件名.
* @param src 要压缩的文件或文件夹路径
* @param dest 压缩文件存放路径
* @param isCreateDir 是否在压缩文件里创建目录,仅在压缩文件为目录时有效.<br />
* 如果为false,将直接压缩目录下文件到压缩文件.
* @param passwd 压缩使用的密码
* @return 最终的压缩文件存放的绝对路径,如果为null则说明压缩失败.
*/
public static String zip(String src, String dest, boolean isCreateDir, String passwd) throws Exception {
File srcFile = new File(src);
dest = buildDestinationZipFilePath(srcFile, dest);
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(8);
parameters.setCompressionLevel(5);
if (!StringUtils.isEmpty(passwd)) {
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(0);
parameters.setPassword(passwd.toCharArray());
}
try {
ZipFile zipFile = new ZipFile(dest);
if (srcFile.isDirectory()) {
if (!isCreateDir) {
File[] subFiles = srcFile.listFiles();
if (subFiles != null && subFiles.length > 0)
for (File f : subFiles) {
if (f.isDirectory()) {
zipFile.addFolder(f, parameters);
} else {
zipFile.addFile(f, parameters);
}
}
return dest;
}
zipFile.addFolder(srcFile, parameters);
} else {
zipFile.addFile(srcFile, parameters);
}
} catch (ZipException e) {
throw e;
}
return dest;
}
private static String buildDestinationZipFilePath(File srcFile, String destParam) {
if (StringUtils.isEmpty(destParam)) {
if (srcFile.isDirectory()) {
destParam = srcFile.getParent() + File.separator + srcFile.getName() + ".zip";
} else {
String fileName = srcFile.getName().substring(0, srcFile.getName().lastIndexOf("."));
destParam = srcFile.getParent() + File.separator + fileName + ".zip";
}
} else {
createDestDirectoryIfNecessary(destParam);
if (destParam.endsWith(File.separator)) {
String fileName = "";
if (srcFile.isDirectory()) {
fileName = srcFile.getName();
} else {
fileName = srcFile.getName().substring(0, srcFile.getName().lastIndexOf("."));
}
destParam = destParam + fileName + ".zip";
}
}
return destParam;
}
private static void createDestDirectoryIfNecessary(String destParam) {
File destDir = null;
if (destParam.endsWith(File.separator)) {
destDir = new File(destParam);
} else {
destDir = new File(destParam.substring(0, destParam.lastIndexOf(File.separator)));
}
if (!destDir.exists())
destDir.mkdirs();
}
}四.下载
/**
* 导出名称:交付物文件.zip
* 文件地址:compressPath + "交付物文件.zip"
* */
this.outputStream(response,"交付物文件.zip",compressPath + "交付物文件.zip");五.导出文件
/**
* 导出文件
* @param response
* @param fileName:导出附件名称
* @param filePath:导出附件目标地址
*/
private void outputStream(HttpServletResponse response, String fileName, String filePath) {
BufferedInputStream br = null;
BufferedOutputStream out = null;
try {
// 将excel放入输出流推出
OutputStream os = response.getOutputStream();
out = new BufferedOutputStream(os);
// fileDownload插件以此判断下载是否成功,不设置则不执行成功回调函数
response.setHeader("Set-Cookie", "fileDownload=true; path=/");
// 设置文件类型
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/zip");
fileName = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1"));
//读取文件
br = new BufferedInputStream(new FileInputStream(new File(filePath)));
byte[] buf = new byte[1024];
int len = 0;
while ((len = br.read(buf)) > 0) {
out.write(buf, 0, len);
}
} catch (IOException e) {
logger.error(e.getMessage(), e);
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
logger.error("zip文件流读取失败:", e.getMessage());
}
}
if (out != null) {
try {
out.flush();
out.close();
} catch (IOException e) {
logger.error("输出流关闭失败:", e.getMessage());
}
}
}
}六.文件删除、文件夹删除
// 删除临时文件
this.delFile(fileCre);
// 删除临时文件.zip
File fileZip = new File(fasConstant.getValue(FasConstant.FILEPATH) + "交付物文件.zip");
/***
* 删除文件夹下所有文件(包括子目录内的文件)
*/
public static boolean delFile(File file) {
//判断文件不为null或文件目录存在
if (file == null || !file.exists()) {
System.out.println("文件删除失败,请检查文件路径是否正确");
return false;
}
//取得这个目录下的所有子文件对象
File[] files = file.listFiles();
//遍历该目录下的文件对象
for (File f : files) {
//打印文件名
String name = file.getName();
System.out.println(name);
//判断子目录是否存在子目录,如果是文件则删除
if (f.isDirectory()) {
delFile(f);
} else {
f.delete();
}
}
//删除空文件夹 for循环已经把上一层节点的目录清空。
return file.delete();
}版权声明:本文为mh99124f原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。