文件夹打包zip"/>
025下载文件夹打包zip
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.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.apachemons.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();}
更多推荐
025下载文件夹打包zip
发布评论