入参:源文件、目标文件夹、目标zip名称
返回值:是否压缩成功
package web.util;
import org.springframework.util.StringUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipUtil {
public static void main(String[] args) {
try {
zip("D:\\a.log", "D:\\11", "123.zip");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 压缩文件
*
* @param srcFilePath 源文件绝对路径
* @param destDirPath 目标文件夹绝对路径
* @param zipName zip文件名称
* @return
*/
public static Boolean zip(String srcFilePath, String destDirPath, String zipName) {
if (StringUtils.isEmpty(srcFilePath) || StringUtils.isEmpty(destDirPath) || StringUtils.isEmpty(zipName)) {
LoggerManager.systemLogger.error("压缩zip入参错误,入参不能有空!");
return false;
}
if (!zipName.endsWith(".zip")) {
LoggerManager.systemLogger.error("压缩zip入参错误,压缩包名称必须以zip结尾!");
return false;
}
File srcFile = new File(srcFilePath);
if (!srcFile.exists() || srcFile.isDirectory()) {
LoggerManager.systemLogger.error("压缩zip入参错误,源文件不存在或者源文件是文件夹! srcFilePath={}", srcFilePath);
return false;
}
File destDirPathFile = new File(destDirPath);
if (!destDirPathFile.exists() || destDirPathFile.isFile()) {
LoggerManager.systemLogger.error("压缩zip入参错误,目标路径不存在或目标路径不是文件夹! destDirPath={}", destDirPath);
return false;
}
FileInputStream fis = null;
ZipOutputStream zos = null;
try {
fis = new FileInputStream(srcFile);
zos = new ZipOutputStream(new FileOutputStream(destDirPath + "/" + zipName));
zos.putNextEntry(new ZipEntry(srcFile.getName()));
int len;
byte[] buffer = new byte[1024];
while ((len = fis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
zos.closeEntry();
return true;
} catch (Exception e) {
LoggerManager.exceptionLogger.error("压缩zip出现异常!", e);
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
LoggerManager.exceptionLogger.error("压缩zip出现异常,FileInputStream关闭异常!", e);
}
}
if (zos != null) {
try {
zos.close();
} catch (IOException e) {
LoggerManager.exceptionLogger.error("压缩zip出现异常,ZipOutputStream关闭异常!", e);
}
}
}
return false;
}
}