近兩天在開發(fā)過程中碰到一個需求路克,需要將服務(wù)器上的多個文件打包為ZIP,并進(jìn)行下載∪迨浚現(xiàn)將打包核心代碼貼出來叽躯,以便相互交流:
/**
*
* @param srcfile? ? ? ?需要打包為zip的文件集合
* @param zipfile? ? ? ? 創(chuàng)建的zip文件
*/
public void zipFiles(List srcfile, File zipfile) {
byte[] buf = new byte[1024];
try {
// 創(chuàng)建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);
// 將字節(jié)從文件寫到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();
}
}
以上代碼可以復(fù)用,只需傳入固定參數(shù)即可夜矗。并且在Linux環(huán)境下泛范,中文文件名亂碼也得到解決。