後綴爲tar.gz的文件實際上時先將文件(單個或多個)打包成後綴爲tar的(tar包)文件,再用gzip壓縮成gz文件,如此來講咱們即可以用兩步來實現此功能,請看代碼:java
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;apache
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;
}app
/**
*
* @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));
}
}spa