44 lines
1.3 KiB
Java
44 lines
1.3 KiB
Java
|
package com.zcloud.util;
|
|||
|
|
|||
|
import java.io.File;
|
|||
|
import java.io.*;
|
|||
|
import java.util.List;
|
|||
|
import java.util.zip.*;
|
|||
|
|
|||
|
public class CompressDownloadUtil {
|
|||
|
|
|||
|
/**
|
|||
|
* 将多个文件压缩到指定输出流中
|
|||
|
*
|
|||
|
* @param files 需要压缩的文件列表
|
|||
|
* @param outputStream 压缩到指定的输出流
|
|||
|
* @author hongwei.lian
|
|||
|
* @date 2018年9月7日 下午3:11:59
|
|||
|
*/
|
|||
|
public static void compressZip(List<File> files, OutputStream outputStream) {
|
|||
|
ZipOutputStream zipOutStream = null;
|
|||
|
try {
|
|||
|
//-- 包装成ZIP格式输出流
|
|||
|
zipOutStream = new ZipOutputStream(new BufferedOutputStream(outputStream));
|
|||
|
// -- 设置压缩方法
|
|||
|
zipOutStream.setMethod(ZipOutputStream.DEFLATED);
|
|||
|
//-- 将多文件循环写入压缩包
|
|||
|
for (int i = 0; i < files.size(); i++) {
|
|||
|
File file = files.get(i);
|
|||
|
FileInputStream filenputStream = new FileInputStream(file);
|
|||
|
byte[] data = new byte[(int) file.length()];
|
|||
|
filenputStream.read(data);
|
|||
|
//-- 添加ZipEntry,并ZipEntry中写入文件流,这里,加上i是防止要下载的文件有重名的导致下载失败
|
|||
|
zipOutStream.putNextEntry(new ZipEntry(i + file.getName()));
|
|||
|
zipOutStream.write(data);
|
|||
|
filenputStream.close();
|
|||
|
zipOutStream.closeEntry();
|
|||
|
}
|
|||
|
} catch (IOException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|