Java实现将多个文件打包压缩成tar.gz文件
2010-08-24 15:28
567 查看
后缀为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));
}
}
可以打包压缩,那么解压缩就是反其道而行,有时间再来写一篇解压缩的。
相关文章推荐
- java tar.gz 格式多文件打包压缩与解压
- java tar.gz 格式多文件打包压缩与解压
- Windows下如何将文件打包压缩成 .tar.gz格式
- 利用tar32.dll实现压缩成.tar.gz文件
- java 压缩打包文件的实现方法
- 使用Java实现多个文件压缩打包
- linux下各种打包与压缩文件后缀及其解包解压缩方法.gz、.tar.gz、tgz...
- java实现多文件压缩打包
- linux下如何打包压缩?解包解压?.tar文件.gz文件
- 关于windows下C++实现解压、压缩 .tar.gz文件
- java 压缩以及解压文件,tar,zip,gz(gizp)
- java压缩文件成tar.gz格式
- JAVA实现多文件压缩打包
- java 压缩以及解压文件,有tar,zip,gz(gizp)和解压
- Python实现采用相对路径打包成tar压缩文件
- Java实现多文件压缩打包的方法
- python 实现将文件或文件夹用相对路径打包为 tar.gz 文件
- java实现文件打包压缩处理
- linux下如何将多个文件压缩打包成.tar.gz
- java实现将多个文件打包成zip压缩文件以及对压缩文件的加密