使用Apache Commons Compress进行文件压缩

使用Apache Commons Compress进行文件压缩


package com.app.common.util.zip;

import java.io.*;

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.utils.IOUtils;

/**
* 文件压缩抽象类
* @author Administrator
*
*/
public abstract class AbstractZipHandler {

public static final String ZIP_SUFFIX = ".zip";

public static final String DEF_DECODING = "GBK";

private File inputFile;

private File outFile;

private FileFilter fileFilter;

private ZipArchiveOutputStream zipOutput;

private String encoding;

public AbstractZipHandler(File inputFile, File outFile) throws IOException {
if (null == inputFile || !inputFile.exists()|| !inputFile.isDirectory() || !inputFile.canRead()) {
throw new IllegalArgumentException("The inputFile must be directory and can read.");
}
if (false == (outFile.getCanonicalPath().toLowerCase().endsWith(ZIP_SUFFIX))) {
throw new IllegalArgumentException("The outFile must be zip file.");
}

this.inputFile = inputFile;
this.outFile = outFile;

zipOutput = new ZipArchiveOutputStream(outFile);
zipOutput.setEncoding(this.getEncoding());
}

public void zip() {
File[] files = this.getFileFilter() == null ? inputFile.listFiles():inputFile.listFiles(this.getFileFilter());
try {
for (File file : files) {
zipFile(file);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != zipOutput) {
try {
zipOutput.close();
} catch (IOException e) {
}
zipOutput = null;
}

}
}

private void zipFile(File file) throws IOException {
if (file.isDirectory()) {
zipOutput.putArchiveEntry(new ZipArchiveEntry(this.getEntryName(
inputFile, file) + "/"));
zipOutput.closeArchiveEntry();
for (File f : this.getFileFilter() == null ? file.listFiles()
: file.listFiles(this.getFileFilter())) {
zipFile(f);
}
} else {
zipOutput.putArchiveEntry(new ZipArchiveEntry(this.getEntryName(
inputFile, file)));
IOUtils.copy(new FileInputStream(file), zipOutput);
zipOutput.closeArchiveEntry();
}
}

public String getEntryName(File inputFile, File entryFile)
throws IOException {
String result = null;
String inputFileParentPath = inputFile.getParentFile()
.getCanonicalPath();
String entryFilePath = entryFile.getCanonicalPath();
result = entryFilePath.substring(entryFilePath
.indexOf(inputFileParentPath) + inputFileParentPath.length());
return result;
}

public FileFilter getFileFilter() {
return fileFilter;
}

public void setFileFilter(FileFilter fileFilter) {
this.fileFilter = fileFilter;
}

public String getEncoding() {
return null == encoding ? DEF_DECODING : encoding;
}

public void setEncoding(String encoding) {
this.encoding = encoding;
}

}




package com.app.common.util.zip;

import java.io.File;
import java.io.IOException;

/**
* 文件压缩默认实现类
* @author Administrator
*
*/
public class DefZipHandler extends AbstractZipHandler {

public DefZipHandler(File inputFile, File outFile) throws IOException {
super(inputFile, outFile);
}


}




package com.app.common.util.zip;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

/**
* 文件压缩测试类
* @author Administrator
*
*/
public class TestDefZipHandler {

public static void main(String[] args) throws IOException {

File inputFile = new File("c:/test/");

File outFile = new File("c:/test.zip");

AbstractZipHandler handler = new DefZipHandler(inputFile, outFile);

handler.setFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
return true;
}
});

handler.zip();

System.out.println("finished...");
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值