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

如何用Java打印tar.gz文件的内容?,java,compression,tar,Java,Compression,Tar,我必须实现一个应用程序,允许在tar.gz文件中打印所有文件的内容 例如: 如果我在一个名为testx的文件夹中有三个这样的文件: A.txt包含“上帝保佑女王” B.txt包含“Ubi maior,minor cessat”字样 gz是一个用gzip压缩的文件,其中包含一个C.txt文件,上面写着“你好,美国!!” 所以我压缩testx,获得压缩的tar文件:testx.tar.gz 因此,对于我的Java应用程序,我希望在控制台中打印: “上帝保佑女王” “Ubi maior,小塞萨特” “

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

例如:
如果我在一个名为testx的文件夹中有三个这样的文件:
A.txt包含“上帝保佑女王”
B.txt包含“Ubi maior,minor cessat”字样
gz是一个用gzip压缩的文件,其中包含一个C.txt文件,上面写着“你好,美国!!”

所以我压缩testx,获得压缩的tar文件:testx.tar.gz

因此,对于我的Java应用程序,我希望在控制台中打印:
“上帝保佑女王”
“Ubi maior,小塞萨特”
“你好,美国!!”

我已经实现了ZIP版本,它工作得很好,但是将tar库从ApacheAnt中保留下来,我注意到它不像ZIP java UTIL那样容易

有人能帮我吗

我已经开始上网了解如何实现我的目标,因此我有以下代码:

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的流保存到文件中,但我不想要它!在zip版本中,在保留第一个条目ZipEntry之后,我们可以从压缩根文件夹testx.tar.gz中提取流,然后创建一个新的ZipInputStream并使用它来获取内容

是否可以使用tar.gz文件执行此操作


谢谢。

为了不必写入
文件
您应该使用a并使用正确的编码。

在网上冲浪时,我遇到了一个有趣的想法:

将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^ ^

的内容: