浏览 11809 次
锁定老帖子 主题:java实现对tar文件的解压
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-16
我用的第三方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有兴趣的话可以去看一看 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-16
ANT的源代码中有这部分代码,但是存在中文文件名BUG,需要手工修改。
|
|
返回顶楼 | |