论坛首页 Java企业应用论坛

java实现对tar文件的解压

浏览 11809 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-16  
最近做的项目中涉及到了对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有兴趣的话可以去看一看
   发表时间:2009-03-16  
ANT的源代码中有这部分代码,但是存在中文文件名BUG,需要手工修改。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics