如何用Java打印tar.gz文件的内容?
我必须实现一个应用程序,允许在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,小塞萨特” “
如果我在一个名为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^ ^的内容: