如何解决从 TarArchiveInputStream 获取特定文件输入流
我有一个 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 = new FileInputStream(entry.getFile());
时出现空指针异常
我知道我们可以先将此文件保存在目录中,然后再读取该文件,但我不想将此文件保存在目录中。
解决方法
没有您阅读的档案条目的文件。 TarArchiveEntry
的 getFile
方法仅在使用 File
-arg 构造函数创建条目时返回任何有用的内容,这仅在创建存档而不读取它时才有意义。
您要查找的流是 TarArchiveInputStream
本身,在您将它定位在您要阅读的条目后,即
if (!entry.isDirectory() && entry.getName().equals("version.txt")) {
versionInputStream = debInputStream;
break;
}
注意 break
。
尚未发布(尚未发布)Commons Compress 1.21 将包含一个新的 TarFile
类,该类提供对从可查找源(如 {{1 }}) 并将使您的任务更方便。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。