近两天在开发过程中碰到一个需求,需要将服务器上的多个文件打包为ZIP,并进行下载。现将打包核心代码贴出来,以便相互交流:
/**
*
* @param srcfile 需要打包为zip的文件集合
* @param zipfile 创建的zip文件
*/
public void zipFiles(List srcfile, File zipfile) {
byte[] buf = new byte[1024];
try {
// 创建zip文件
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
// 压缩文件
for (int i = 0; i < srcfile.size(); i++) {
File file = srcfile.get(i);
FileInputStream in = new FileInputStream(file);
// Add ZIP entry to output stream.
ZipEntry zipEntry=new ZipEntry(file.getName());
//解决Linux下,中文文件名乱码
zipEntry.setUnixMode(644);
out.putNextEntry(zipEntry);
// 将字节从文件写到zip文件
int len;
while ((len = in.read(buf)) >0 ) {
out.write(buf, 0, len);
}
// 完成输入
out.setEncoding("utf-8");
out.closeEntry();
in.close();
}
// 释放资源
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
以上代码可以复用,只需传入固定参数即可。并且在Linux环境下,中文文件名乱码也得到解决。