2011-02-23 36 views
2

我必须实现一个允许在tar.gz文件中打印所有文件内容的应用程序。如何使用Java打印tar.gz文件的内容?

例如:
如果我有一个名为testx文件夹中的三个文件是这样的:
A.TXT包含文字“天佑女王”
B.txt包含文字“育碧MAIOR,轻微cessat “
C.txt.gz是一个用gzip压缩的文件,其中包含文件c.txt,文字为”Hello America !!“

于是我压缩testx,得到压缩的tar文件:testx.tar.gz。

与我的Java应用程序

所以我想在控制台打印:
“天佑女王”
“育碧MAIOR,轻微cessat”
“你好美!”

我已经实现了ZIP版本,它工作的很好,但是从apache ant http://commons.apache.org/compress/保留tar库,我注意到它不像ZIP java utils那样简单。

有人可以帮助我吗?

我已经开始寻找在网络上了解如何实现我的目标,所以我有以下代码:

GZIPInputStream gzipInputStream=null; 
gzipInputStream = new GZIPInputStream(new FileInputStream(fileName)); 
TarInputStream is = new TarInputStream(gzipInputStream); 
TarEntry entryx = null; 

while((entryx = is.getNextEntry()) != null) { 
    if (entryx.isDirectory()) continue; 
    else { 
     System.out.println(entryx.getName()); 
     if (entryx.getName().endsWith("txt.gz")){ 
      is.copyEntryContents(out); 
      // out is a OutputStream!! 
     } 
    } 
} 
在该行 is.copyEntryContents(out)

因此,可以保存在一个文件流传递一个OutputStream,但我不想要它!在保留第一个条目ZipEntry后的zip版本中,我们可以从压缩的根文件夹testx.tar.gz中提取流,然后创建一个新的ZipInputStream并使用它来获取内容。

是否可以用tar.gz文件做到这一点?

谢谢。

+0

相关:[如何在java中压缩/解压缩tar.gz文件](http://stackoverflow.com/questions/7128171/how-to-compress-decompress-tar-gz-files-in-java) – 2011-08-24 15:50:49

回答

2

网上冲浪,我遇到了一个有趣的想法:http://hype-free.blogspot.com/2009/10/using-tarinputstream-from-java.html

转换我们TarEntry到流之后,我们可以通过与像Zip文件中使用了同样的想法:

InputStream tmpIn = new StreamingTarEntry(is, entryx.getSize()); 
// use BufferedReader to get one line at a time 
BufferedReader gzipReader = new BufferedReader(
         new InputStreamReader(
         new GZIPInputStream(
         inputZip))); 

while (gzipReader.ready()) { System.out.println(gzipReader.readLine()); } 
gzipReader.close(); 

所以用这个代码,你可以打印文件testx.tar.gz的内容^ _^