package com.zdhz.speedMigrateTool.file;
import java.io.*;
import java.util.zip.*;
/**
* 压缩文件
* @author Huabing.Liu
*
*/
public class ZipCompressFile {
public ZipCompressFile() {
}
/**
* 压缩文件方法,传递两个参数,一个是zip文件名,一个是源文件
*/
public void compress(String zipfilename,String filename) {
// TODO Auto-generated method stub
ZipCompressFile book = new ZipCompressFile();
File file=new File(filename);
if(!file.exists()){
System.out.println(filename+"不存在");
return;
}
try {
book.zip(zipfilename, file);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//"speed.zip" //"c:/speed/xinjian"
private void zip(String zipFileName, File inputFile) throws Exception {
System.out.println("压缩中...");
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFileName));
BufferedOutputStream bs = new BufferedOutputStream(out);
zip(out, inputFile, inputFile.getName(), bs);
bs.close();
out.close(); // 输出流关闭
System.out.println("压缩完成");
}
private void zip(ZipOutputStream out, File f, String base,
BufferedOutputStream bo) throws Exception { // 方法重载
if (f.isDirectory()) {
File[] fl = f.listFiles();
if (fl.length == 0) {
out.putNextEntry(new ZipEntry(base + "/")); // 创建zip压缩进入点base
}
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + "/" + fl[i].getName(), bo); // 递归遍历子文件夹
}
} else {
out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入点base
FileInputStream in = new FileInputStream(f);
BufferedInputStream bi = new BufferedInputStream(in);
int b;
while ((b = bi.read()) != -1) {
bo.write(b); // 将字节流写入当前zip目录
}
bi.close();
in.close(); // 输入流关闭
bo.flush();//注意,这里必须加上,否则压缩文件会有问题(部分文件没有数据)
}
}
}
//通过创建类,调用方法并传入相应的文件名称即可进行测试