今天做压缩的时候受虐了= =,刚开始百度的一些不是压缩后打不开文件,就是解压完路径不对。最后终于人品爆发找到一个最简单又好使的,非常感谢原作者,我做了一点修改,但保证测试完美通过……
注意要用到ant的Jar包
下面是DEMO:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class AntZip {
public static void ZipFiles(java.io.File[] srcfile, java.io.File zipfile) {
System.out.println("================压缩开始==================");
byte[] buf = new byte[1024];
try {
// Create the ZIP file
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
//ZipOutputStream out = new ZipOutputStream(Response.getOutputStream());--设置成这样可以不用保存在本地,再输出, 通过response流输出。
// Compress the files
for (int i = 0; i < srcfile.length; i++) {
FileInputStream in = new FileInputStream(srcfile[i]);
// Add ZIP entry to output stream.
out.putNextEntry(new ZipEntry(srcfile[i].getName()));
// Transfer bytes from the file to the ZIP file
out.setEncoding("gbk"); //解决中文命名的excel压缩后名字变乱码的方法
int len;
while ( (len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
// Complete the entry
out.closeEntry();
in.close();
}
// Complete the ZIP file
out.close();
System.out.println("================压缩完成==================");
}
catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
File f = new File("D:\\考核");
File out = new File("D:\\考核.zip");//文件输出路径
AntZip az = new AntZip();
az.ZipFiles(f.listFiles(), out);
//一般还要删除源文件,在业务逻辑中实现吧
}
}