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)