Java 从TarArchiveInputStream获取特定文件inputstream
我有一个tar文件,其中包含许多文件。我需要从tar文件中获取一个特定的文件,并从该文件中读取数据 我正在使用下面的代码卸载文件,我将使用其他函数读取返回的输入流Java 从TarArchiveInputStream获取特定文件inputstream,java,inputstream,tar,apache-commons-compress,Java,Inputstream,Tar,Apache Commons Compress,我有一个tar文件,其中包含许多文件。我需要从tar文件中获取一个特定的文件,并从该文件中读取数据 我正在使用下面的代码卸载文件,我将使用其他函数读取返回的输入流 private InputStream unTar(final File inputFile, final File outputDir) throws FileNotFoundException, IOException, ArchiveException { InputStream versionInputSt
private InputStream unTar(final File inputFile, final File outputDir) throws FileNotFoundException, IOException, ArchiveException {
InputStream versionInputStream = null;
final InputStream is = new FileInputStream(inputFile);
final TarArchiveInputStream debInputStream = (TarArchiveInputStream) new ArchiveStreamFactory().createArchiveInputStream("tar", is);
TarArchiveEntry entry = null;
while ((entry = (TarArchiveEntry)debInputStream.getNextEntry()) != null) {
if (!entry.isDirectory() && entry.getName().equals("version.txt")) {
versionInputStream = new FileInputStream(entry.getFile());
}
}
return versionInputStream;
}
当我执行versionInputStream=newfileinputstream(entry.getFile())时,会出现空指针异常代码>
我知道我们可以先将此文件保存在目录中,然后读取该文件,但我不想将此文件保存在目录中
有没有什么方法可以在不将文件保存到某个目录的情况下读取此文件?没有文件可供您读取的存档条目使用TarArchiveEntry
的getFile
方法仅在使用文件
-arg构造函数创建条目时返回有用的内容,该构造函数仅在创建存档而不读取存档时才有意义
您要查找的流是TarArchiveInputStream
本身,在您将其定位到要读取的条目后,即
if(!entry.isDirectory()&&entry.getName().equals(“version.txt”)){
versionInputStream=DeInputStream;
打破
}
注意中断
尚未发布的Commons Compress 1.21(没有发布日期,也没有发布日期)将包含一个新的TarFile
类,该类提供对从可查找源(如文件
)读取的存档的随机访问,并将使您的任务更方便