java.util.zip 包中的类不能处理中文字符,如果文件名包含中文,会有乱码,换成 org.apache.tools.zip 就可以解决问题,org.apache.tools.zip 是 apache Ant 中的包。
package com.zjames.common;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
// import java.util.zip.ZipEntry;
// import java.util.zip.ZipOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class JavaZip {
public static void main(String args[]) {
args = new String[]{"zips/t1.txt","zips/t2.txt", "lib/an.jar"};
String outputFile = "zips/test.zip";
try {
JavaZip.zip(args, outputFile);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void zip(String files[], String outputFile) throws IOException {
final int BUFF_SIZE = 2048;
FileOutputStream out = new FileOutputStream(outputFile);
BufferedOutputStream buffOut = new BufferedOutputStream(out );
ZipOutputStream zout = new ZipOutputStream(buffOut);
for (int i = 0; i < files.length; i++) {
File file = new File(files[i]);
InputStream in = new FileInputStream(file);
BufferedInputStream buffIn = new BufferedInputStream(in, BUFF_SIZE);
ZipEntry zipEntry = new ZipEntry(file.getName());
zout.putNextEntry(zipEntry);
int len = 0;
byte data[] = new byte[BUFF_SIZE];
while ((len = buffIn.read(data)) != -1) {
zout.write(data, 0, len);
}
zout.closeEntry();
}
zout.close();
}
}