压缩文件或文件夹

package org.shfft.fq.data.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipCompressor {

static final int BUFFER = 8192;
private File zipFile;

public ZipCompressor(String pathName) {

zipFile = new File(pathName);
}

public void compress(String... pathName) {

ZipOutputStream out = null;
try {
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());
out = new ZipOutputStream(cos);
String basedir = "";
for(int i=0;i<pathName.length;i++){
compress(new File(pathName[i]),out,basedir);
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}

public void compress(String srcPathName) {
File file = new File(srcPathName);
if(!file.exists()){
throw new RuntimeException(srcPathName + "不存在!");
}
try {
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());
ZipOutputStream out = new ZipOutputStream(cos);
String basedir = "";
compress(file, out, basedir);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}

private void compress(File file,ZipOutputStream out,String basedir) {
//判断是文件还是目录
if(file.isDirectory()){
this.compressDirectory(file, out, basedir);
}else{
this.compressFile(file, out, basedir);
}
}

/*
* 压缩一个目录
*/
private void compressDirectory(File dir,ZipOutputStream out,String basedir) {

if(!dir.exists()){
return;
}
File[] files = dir.listFiles();
for(int i=0;i<files.length;i++){
compress(files[i],out,basedir + dir.getName() + "/");
}
}

/*
* 压缩一个文件
*/
public void compressFile(File file,ZipOutputStream out,String basedir) {

if(!file.exists()){
return ;
}
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(basedir + file.getName());
out.putNextEntry(entry);
int count;
byte data[] = new byte[BUFFER];
while((count = bis.read(data, 0, BUFFER)) != -1){
out.write(data, 0, count);
}
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
ZipCompressor zipCompressor = new ZipCompressor("W:\junit.zip");
zipCompressor.compress("W:\junit");
}

}

原文地址:https://www.cnblogs.com/fqfanqi/p/6121642.html