gpt4 book ai didi

java - 使用 Commons-compression 在 Java 中读取 tar.gz

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:32:32 30 4
gpt4 key购买 nike

好的,所以我想读取 tar.gz 文件(或 xy)的内容,但这是一回事。我正在做的或多或少是这样的:

TarArchiveInputStream tarInput = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream("c://temp//test.tar.gz")));
TarArchiveEntry currentEntry = tarInput.getNextTarEntry();
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
while (currentEntry != null) {
File f = currentEntry.getFile();
br = new BufferedReader(new FileReader(f));
System.out.println("For File = " + currentEntry.getName());
String line;
while ((line = br.readLine()) != null) {
System.out.println("line="+line);
}
}
if (br!=null) {
br.close();
}

但是当我调用 TarArchiveEntrygetFile 方法时,我得到的是 null。
我正在使用 Apache commons compress 1.8.1

最佳答案

您不能使用 TarArchiveEntry 的 getFile。当您在 tar 文件中压缩文件时,该 getter 仅用于相反的操作。

相反,您应该直接从 TarArchiveInputStream 读取。它会负责将"file"的内容返回给您并即时解压缩。

例如(未经测试的代码,YMMV):

TarArchiveInputStream tarInput = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream("c://temp//test.tar.gz")));
TarArchiveEntry currentEntry = tarInput.getNextTarEntry();
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
while (currentEntry != null) {
br = new BufferedReader(new InputStreamReader(tarInput)); // Read directly from tarInput
System.out.println("For File = " + currentEntry.getName());
String line;
while ((line = br.readLine()) != null) {
System.out.println("line="+line);
}
currentEntry = tarInput.getNextTarEntry(); // You forgot to iterate to the next file
}

关于java - 使用 Commons-compression 在 Java 中读取 tar.gz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25749550/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com