我试图首次使用commons-compress.jar解压缩tar文件。这是我的初始代码,它抛出错误。
TarArchiveInputStream myTarFile=new TarArchiveInputStream(
(new GZIPInputStream
(new FileInputStream("C:/Users/abc/xyz_20151010.tar")));
System.out.println(myTarFile.getCurrentEntry());
tar文件包含扩展名为.dat.gz.bak
的文件集我需要从.dat文件中读取和处理数据。
答案 0 :(得分:1)
您正在读取tar文件,因为gzip压缩了它的普通tar,只有里面的项目被压缩。
因此,请避免使用此GZIPInputStream,而是逐项进行,使用read()读取它,然后使用GZIPInputstream(ByteArrayInputStream(content))进行处理。您可以考虑创建即时读取内容的输入流。
答案 1 :(得分:1)
如果您的输入文件是.tar.gz
,那么您应该将文件包装在TarInputStream
中,将tar包装在GZip
中。但是从文件名来看,你似乎有一个普通的tar档案。
所以,如果我理解你的输入格式,你需要这样的东西:
public class MyDataReader {
private final TarArchiveInputStream tar;
public boolean hasNextData() {
return tar.getNextTarEntry() != null;
}
public MyData nextData() {
byte[] buff = new byte[tar.getCurrentEntry().getSize()];
// loop over tar until all entry has been read
InputStream entry = new ByteArrayInputStream(buff);
GZIPInputStream gzip = new GZipInputStream(entry);
// process gzip input stream
}
}