我正在使用以下代码读取一个tar.gz
归档文件:
ArchiveEntry entry = tarArchiveInputStream.getNextEntry();
问题:我该如何将这个ArchiveEntry转换为一个InputStream
,以便我可以实际读取和处理文件到一个String
中?
我正在使用以下代码读取一个tar.gz
归档文件:
ArchiveEntry entry = tarArchiveInputStream.getNextEntry();
问题:我该如何将这个ArchiveEntry转换为一个InputStream
,以便我可以实际读取和处理文件到一个String
中?
它已经是一个InputStream
了。
byte[] buf = new byte[(int) entry.getSize()];
int k = tarArchiveInputStream.read(buf, 0, buf.length);
String s = new String(buf, 0, k);
import org.apache.commons.compress.utils.IOUtils
byte[] buf = new byte[(int) entry.getSize()];
int readed = IOUtils.readFully(tarArchiveInputStream,buf);
//readed should equal buffer size
if(readed != buf.length) {
throw new RuntimeException("Read bytes count and entry size differ");
}
String string = new String(buf, StandardCharsets.UTF_8);
如果您的文件编码不是utf-8,请在字符串构造函数中使用该编码而不是utf-8。
IOUtils.readFully
可以直接从commons.compress
中使用。 - membersound如果您真的想逐个读取文件,TarEntry实际上在其中保存了File对象:
这个类表示Tar归档中的一个条目。它由条目的头部和条目的File组成。
因此,只需初始化另一个FileInputStream即可:
import org.apache.commons.io.IOUtils;
String file = IOUtils.toString(new FileInputStream(entry.getFile());
org.apache.commons.compress.archivers.ArchiveEntry
吗? - MWiesner