Java 从TarArchiveInputStream获取特定文件inputstream

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

我有一个tar文件,其中包含许多文件。我需要从tar文件中获取一个特定的文件,并从该文件中读取数据

我正在使用下面的代码卸载文件,我将使用其他函数读取返回的输入流

 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
类,该类提供对从可查找源(如
文件
)读取的存档的随机访问,并将使您的任务更方便