如何使用 Java 打印 tar.gz 文件的内容?

Posted

技术标签:

【中文标题】如何使用 Java 打印 tar.gz 文件的内容?【英文标题】:How to print the content of a tar.gz file with Java? 【发布时间】:2011-02-23 16:53:34 【问题描述】:

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

例如: 如果我在名为 testx 的文件夹中有三个这样的文件: A.txt 包含“God Save The Queen”字样 B.txt 包含“Ubi maior,minor cessat”字样 C.txt.gz 是一个使用 gzip 压缩的文件,其中包含 c.txt 文件,其中包含“Hello America!!”字样

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

因此,我想使用我的 Java 应用程序在控制台中打印: 《天佑女王》 “Ubi maior,次要停止” “你好美国!!”

我已经实现了 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 文件执行此操作?

谢谢。

【问题讨论】:

相关:How to Compress/Decompress tar.gz files in java 【参考方案1】:

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

将我们的 TarEntry 转换为 Stream 后,我们可以采用与 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 的内容 ^_^

【讨论】:

【参考方案2】:

为了不必写信给File,您应该使用ByteArrayOutputStream,并使用正确编码的public String toString(String charsetName) 。

【讨论】:

以上是关于如何使用 Java 打印 tar.gz 文件的内容?的主要内容,如果未能解决你的问题,请参考以下文章

java里怎么解压tar.gz文件啊,网上好多例子都不行

如何在不解压缩内容的情况下查看 .tar.gz 存档中特定文件的内容?

java不解压tar.gz读取包里面的某个文件内容

java不解压tar.gz读取包里面的某个文件内容

java里怎么解压tar.gz文件啊,网上好多例子都不行

如何只查看tar.gz压缩文件中顶层目录的列表