java实现对tar文件的解压

最近做的项目中涉及到了对tar文件的解压,众所周知jdk中提供了对zip文件的操作,对tar文件并没有相关的api,这种情况下只能是依赖于第三方jar了。
我用的第三方jar包是javatar2.5,apache也有相关的api org.apache.tools.tar,网上有人说它是对javatar的封装,这个就不是我们关心的范围了,不过看过相关的文档后发现 使用方式确实很多地方是相同的(其实jdk中对zip文件的api使用也是这样)
我的想法很简单:以流的方式读入 以需要的格式写出
根据以上的想法我首先需要一个读tar文件的流,在javatar中有TarInputStream正好符合我的需求 第一步走出去了 以后就是一马平川了 呵呵 闲话不说 给出我的论证代码
mport java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.ice.tar.TarEntry;
import com.ice.tar.TarInputStream;
import com.zephyr.inflater.service.InflaterManager;

public class InflaterManagerImpl implements InflaterManager {
public void inflat(String path) {
InputStream inputstream = null;
OutputStream outputstream = null;
TarInputStream zis = null;
try {
File file = new File(path);
File tempFile = null;
inputstream = new FileInputStream(file);
zis = new TarInputStream(inputstream);
/*关键在于这个TarEntry 的理解,
实际你的tar包里有多少文件就有多
少TarEntry*/
TarEntry tarEntry = null;
while ((tarEntry = zis.getNextEntry()) != null) {
tempFile = new File("d:\\sss\\" + tarEntry.getName());
tempFile.createNewFile();
outputstream = new FileOutputStream(tempFile);
//定一个缓存池 可以根据实际情况调整大小(事实证
//明很有用)
byte[] buffer = new byte[1024 * 50];
while (true) {
int readsize = zis.read(buffer);
outputstream.write(buffer);
if (readsize < 1024 * 50) {
break;
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
outputstream.flush();
inputstream.close();
zis.close();
outputstream.close();
} catch (Exception e) {
e.printStackTrace();
}

}

}

}
写一个测试类
public class TarTest{
public static void main(String[] args){
InflaterManager ifm=new InflaterManagerImpl();
ifm.inflat("d:/a.tar");
}
}
呵呵 一段最简单功能的tar文件解析代码就完成了 如果需要压缩为tar文件的话javatar中也提供了相关的api有兴趣的话可以去看一看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值