在开发过程中遇到一个小需求,将附件中的文件进行压缩,压缩文件以前没怎么接触过,记录下,直接上代码:
/***
* 将附件中的文件压缩
*
* @param fileMap
压缩前的文件
* @return Map<String,byte[]>
压缩后的文件
*/
private Map<String,byte[]> filesCompressionZIP(Map<String,byte[]> fileMap){
Map<String,byte[]> map = new HashMap();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(bos);
try{
ZipEntry entry = null;
for(Map.Entry<String,byte[]> en: fileMap.entrySet()){
entry = new ZipEntry(en.getKey());
entry.setSize(en.getValue().length);
zip.putNextEntry(entry);
zip.write(en.getValue());
}
}catch(Excepriton e){
LOGGER.error(e.getMessage(),e);
}finally{
try{
zip.closeEntry();
}catch(IOExcepriton e){
LOGGER.error(e.getMessage(),e);
}
try{
zip.close();
}catch(IOExcepriton e){
LOGGER.error(e.getMessage(),e);
}
try{
bos.close();
}catch(IOExcepriton e){
LOGGER.error(e.getMessage(),e);
}
}
map.put(System.currentTimeMillis()+".zip",bos.toByteArray());
return map;
}