由于某些业务需要,某个下载按钮需要下载多个文件,并打包为zip,本人只好查各种资料进行实现
//打包成为ZIP文件
public static ByteArrayOutputStream mergeToZip(Map<String, File> fileMap) {
//合并输出为一个压缩包
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
ZipArchiveOutputStream zip = new ZipArchiveOutputStream(out);
Iterator<Map.Entry<String, File>> set = fileMap.entrySet().iterator();
while (set.hasNext()) {
Map.Entry<String, File> entry = set.next();
File file = entry.getValue();
ZipArchiveEntry zipEntry = new ZipArchiveEntry(entry.getKey());
zipEntry.setSize(file.length());
zip.putArchiveEntry(zipEntry);
FileInputStream in = new FileInputStream(file);
IOUtils.copy(in, zip);
IOUtils.closeQuietly(in);
FileUtils.deleteQuietly(file);
}
zip.closeArchiveEntry();
IOUtils.closeQuietly(zip);
IOUtils.closeQuietly(out);
} catch (Exception e) {
e.printStackTrace();
}
return out;
}
说明:fileMap中的key为被压缩文件的文件名,value为被压缩的文件
依赖的jar包 commons-compress-1.14.jar