Dav*_*d Z 10
那么,至少,您必须下载存档的部分,包括要提取的文件的压缩数据.这表明了以下解决方案:打开URLConnection存档,获取其输入流,将其包装在一个中ZipInputStream,然后重复调用getNextEntry()并closeEntry()遍历文件中的所有条目,直到找到所需的条目.然后你可以使用它来读取它的数据ZipInputStream.read(...).
Java代码看起来像这样:
URL url = new URL("http://example.com/path/to/archive");
ZipInputStream zin = new ZipInputStream(url.getInputStream());
ZipEntry ze = zin.getNextEntry();
while (!ze.getName().equals(pathToFile)) {
zin.closeEntry(); // not sure whether this is necessary
ze = zin.getNextEntry();
}
byte[] bytes = new byte[ze.getSize()];
zin.read(bytes);
Run Code Online (Sandbox Code Playgroud)
当然,这是未经测试的.
与此处的其他答案相反,我想指出ZIP条目是单独压缩的,因此(理论上)您不需要下载除目录和条目本身之外的任何内容.服务器需要支持RangeHTTP标头才能工作.
标准Java API仅支持从本地文件和输入流中读取ZIP文件.据我所知,没有从随机访问远程文件中读取的规定.
由于您使用的是TrueZip,我建议de.schlichtherle.io.rof.ReadOnlyFile使用Apache HTTP Client 实现并使用它创建de.schlichtherle.util.zip.ZipFile.
这不会为压缩的TAR存档提供任何优势,因为整个存档被压缩在一起(除了使用InputStream并在您输入时将其终止).
| 归档时间: |
|
| 查看次数: |
10380 次 |
| 最近记录: |