/**
* 压缩
*
* @param files 多文件
* @param zipFilePath 目标压缩文件路径
* @throws IOException
*/
public static void zip(List<File> files, String zipFilePath) throws IOException {
log.info("启用ZIP压缩工具 >>>>>>>>>> ");
if(files == null || files.size() == 0) return;
if(StringUtils.isBlank(zipFilePath)) return;
File zipFile = createFile(zipFilePath);
FileOutputStream fileOutputStream = null;
ZipOutputStream zipOutputStream = null;
FileInputStream inputStream = null;
try {
fileOutputStream = new FileOutputStream(zipFile);
zipOutputStream = new ZipOutputStream(fileOutputStream);
for(File file : files) {
log.info("正在打包文件 -> " + file.getAbsolutePath());
if(file.exists()) {
zipOutputStream.putNextEntry(new ZipEntry(file.getName()));
inputStream = new FileInputStream(file);
int len;
while((len = inputStream.read(BUF)) > 0) {
zipOutputStream.write(BUF, 0, len);
}
zipOutputStream.closeEntry();
inputStream.close(); //解决方案
}
}
log.info("压缩完成 <<<<<<<<<< " + zipFile.getAbsolutePath());
} finally {
if(inputStream != null) {
inputStream.close();
}
if(zipOutputStream != null) {
zipOutputStream.close();
}
if(fileOutputStream != null) {
fileOutputStream.close();
}
}
}
在循环体内,每次创建一个文件输入流对象,最后关闭的时候,只关闭最后一个文件流,导致其他的文件夹没有关闭,下次下载时,就无法删除之前的下载文件,导致下载时总是累加文件