天天看點

Java壓縮類庫的使用-3.Apache Ant中的打包、壓縮類庫

  inkfish原創,請勿商業性質轉載,轉載請注明來源(http://blog.csdn.net/inkfish)。

  這裡需要關注的是bzip2格式,經過測試,總是無法正确壓縮,原因未知,而apache commons bzip2格式的檔案壓縮正常。(來源:http://blog.csdn.net/inkfish)

ant zip壓縮:(來源:http://blog.csdn.net/inkfish)

package study.inkfish.compress;

import java.io.bufferedinputstream;

import java.io.bufferedoutputstream;

import java.io.file;

import java.io.fileinputstream;

import java.io.fileoutputstream;

import java.io.ioexception;

import java.io.inputstream;

import java.io.outputstream;

import java.util.enumeration;

import org.apache.commons.io.ioutils;

import org.apache.tools.zip.zipentry;

import org.apache.tools.zip.zipfile;

import org.apache.tools.zip.zipoutputstream;

public class antzipcompress extends compress {

@override

protected void docompress(file srcfile, file destfile) throws ioexception {

zipoutputstream zout = null;

inputstream is = null;

try {

is = new bufferedinputstream(new fileinputstream(srcfile), bufferlen);

zout = new zipoutputstream(new bufferedoutputstream(new fileoutputstream(destfile), bufferlen));

zout.putnextentry(new zipentry(srcfile.getname()));

ioutils.copy(is, zout);

zout.closeentry();

} finally {

ioutils.closequietly(is);

ioutils.closequietly(zout);

}

protected void dodecompress(file srcfile, file destdir) throws ioexception {

zipfile zipfile = new zipfile(srcfile);

@suppresswarnings("unchecked")

enumeration<zipentry> enums = zipfile.getentries();

while (enums.hasmoreelements()) {

zipentry entry = enums.nextelement();

inputstream is = new bufferedinputstream(zipfile.getinputstream(entry), bufferlen);

outputstream os = null;

os = new bufferedoutputstream(new fileoutputstream(new file(destdir, entry.getname())), bufferlen);

ioutils.copy(is, os);

ioutils.closequietly(os);

zipfile.closequietly(zipfile);

ant bzip壓縮:(來源:http://blog.csdn.net/inkfish)

import org.apache.commons.io.filenameutils;

import org.apache.tools.bzip2.cbzip2inputstream;

import org.apache.tools.bzip2.cbzip2outputstream;

public class antbzip2compress extends compress {

/**運作異常,無法正确打開*/

outputstream out = null;

out = new cbzip2outputstream(new bufferedoutputstream(new fileoutputstream(destfile), bufferlen));

ioutils.copy(is, out);

ioutils.closequietly(out);

file destfile = new file(destdir, filenameutils.getbasename(srcfile.tostring()));

is = new cbzip2inputstream(new bufferedinputstream(new fileinputstream(srcfile), bufferlen));

os = new bufferedoutputstream(new fileoutputstream(destfile), bufferlen);

ant tar打包:(來源:http://blog.csdn.net/inkfish)

import org.apache.tools.tar.tarentry;

import org.apache.tools.tar.tarinputstream;

import org.apache.tools.tar.taroutputstream;

public class anttarcompress extends compress {

taroutputstream out = null;

out = new taroutputstream(new bufferedoutputstream(new fileoutputstream(destfile), bufferlen));

tarentry entry = new tarentry(srcfile.getname());

entry.setsize(srcfile.length());

out.putnextentry(entry);

out.closeentry();

tarinputstream is = null;

is = new tarinputstream(new bufferedinputstream(new fileinputstream(srcfile), bufferlen));

tarentry entry = null;

while ((entry = is.getnextentry()) != null) {

if (entry.isdirectory()) {

file directory = new file(destdir, entry.getname());

directory.mkdirs();

} else {

bufferedoutputstream bos = null;

byte[] buffer = new byte[1024 * 512];//512k buffer

bos = new bufferedoutputstream(new fileoutputstream(

new file(destdir, entry.getname())), buffer.length);

int len;

long size = entry.getsize();

while (size > 0) {

if (size < buffer.length) {

len = is.read(buffer, 0, (int) size);

size -= len;

len = is.read(buffer);

bos.write(buffer, 0, len);

ioutils.closequietly(bos);

注:org.apache.commons.io包為apache common io,項目首頁:http://commons.apache.org/io/

,提供了io操作的很多友善的方法,基于apache 2.0 license,可用于商業用途。(來源:http://blog.csdn.net/inkfish)