Java实现将多个文件打包压缩成tar.gz文件



Java实现将多个文件打包压缩成tar.gz文件方法介绍。后缀为tar.gz的文件实际上时先将文件(单个或多个)打包成后缀为tar的(tar包)文件,再用gzip压缩成gz文件,如此来说我们便可以用两步来实现此功能,请看代码:

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.zip.GZIPOutputStream;

 

import org.apache.commons.compress.archivers.tar.TarArchiveEntry;

import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;

import org.apache.commons.compress.utils.IOUtils;

 

/**

* @Title: GZIPUtil.java

* @Description: gzip文件压缩和解压缩工具类

* @author LM

* @date 2009-11-4 下午06:23:29

* @version V1.0

*/

public class GZIPUtil {

 

/**

*

* @Title: pack

* @Description: 将一组文件打成tar包

* @param sources 要打包的原文件数组

* @param target 打包后的文件

* @return File 返回打包后的文件

* @throws

*/

public static File pack(File[] sources, File target){

FileOutputStream out = null;

try {

out = new FileOutputStream(target);

} catch (FileNotFoundException e1) {

e1.printStackTrace();

}

TarArchiveOutputStream os = new TarArchiveOutputStream(out);

for (File file : sources) {

try {

os.putArchiveEntry(new TarArchiveEntry(file));

IOUtils.copy(new FileInputStream(file), os);

os.closeArchiveEntry();

 

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

if(os != null) {

try {

os.flush();

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

 

return target;


}

 

/**

*

* @Title: compress

* @Description: 将文件用gzip压缩

* @param source 需要压缩的文件

* @return File 返回压缩后的文件

* @throws

*/

public static File compress(File source) {

File target = new File(source.getName() + “.gz”);

FileInputStream in = null;

GZIPOutputStream out = null;

try {

in = new FileInputStream(source);

out = new GZIPOutputStream(new FileOutputStream(target));

byte[] array = new byte[1024];

int number = -1;

while((number = in.read(array, 0, array.length)) != -1) {

out.write(array, 0, number);

}

} catch (FileNotFoundException e) {

e.printStackTrace();

return null;

} catch (IOException e) {

e.printStackTrace();

return null;

} finally {

if(in != null) {

try {

in.close();

} catch (IOException e) {

e.printStackTrace();

return null;

}

}

 

if(out != null) {

try {

out.close();

} catch (IOException e) {

e.printStackTrace();

return null;

}

}

}

return target;

}

 

public static void main(String[] args) {

File[] sources = new File[] {new File(“task.xml”), new File(“app.properties”)};

File target = new File(“release_package.tar”);

compress(pack(sources, target));

}

}

 

 

可以打包压缩,那么解压缩就是反其道而行,有时间再来写一篇解压缩的。