6

给定ZipFile zip、它的ZipEntry entry和目标File unzippedEntryFile,最可读的写入方式是entry什么unzippedEntryFile

我使用Google GuavaApache.Commons.IO提出了以下解决方案:

InputSupplier<ByteArrayInputStream> entryInputSupplier = ByteStreams.newInputStreamSupplier(IOUtils.toByteArray(zip.getInputStream(entry)));
Files.copy(entryInputSupplier, unzippedEntryFile);

但是,有些事情告诉我它可以变得更简单。

谢谢,
康拉德

4

2 回答 2

3

我不知道你的代码有什么不可读的,除了你有很多嵌套调用。这些可以分解并分配给局部变量,这会使代码更长(但在我看来,更具可读性)。

您似乎确实处理了两次数据-一次将其读入字节数组,然后再次将其复制到文件中。我没有对此进行测试,但它应该可以工作并将数据移动量减少一半:

final InputStream zipStream = zip.getInputStream(entry);
InputSupplier<InputStream> supplier = new InputSupplier<InputStream>() {
    InputStream getInput() {
        return zipStream;
    }
};
Files.copy(supplier, unzippedEntryFile);

实际上,您可以创建自己的小类来实现InputSuppler<InputStream>. 我很惊讶我在 Guava 库中找不到。(显然,其他人也对此感到惊讶。)

于 2012-10-19T16:44:07.380 回答
1

这是一个快速链接,其中可能包含Zip 文件操作的所有可能方案。如果是简单的文件操作,这里是 Sun 的教程。确信有很多开源 API。这是IO 教程的链接。干杯

于 2012-10-19T16:37:15.057 回答