如何使用ZipEntry读取位于另一个zipfile中的一个zip文件中的数据?

时间:2014-09-03 22:15:07

标签: java file inputstream zipfile

我有一个zip文件(x.zip),其中有另一个zipfile(y.zip)。我需要在y.zip中读取一个文件。如何迭代这两个zip文件来读取文件?

我用来迭代x.zip来读取y.zip的代码如下。

在代码中,“zipX”代表“x.zip”。遇到“y.zip”时,它满足代码中的“if condition”。在这里,我需要遍历“zipEntry”并读取其中的文件。

如何实现这一目标?

private void getFileAsBytes(String path, String name) throws IOException {
        ZipFile zipX = new ZipFile(path);
        Enumeration<? extends ZipEntry> entries = zipX.entries();
        while (entries.hasMoreElements())
        {
            ZipEntry zipEntry = entries.nextElement();
            if(zipEntry.getName().contains(name) && zipEntry.getName().endsWith(".zip")) {
                InputStream is;
                is = zipX.getInputStream(zipEntry);
                // Need to iterate through zipEntry here and read data from a file inside it.
                break;
            }
        }
        zipX.close();
}

1 个答案:

答案 0 :(得分:1)

根据ZipFile docs,您需要传入File对象或文件路径;不支持InputStream。

考虑到这一点,您可以将InputStream写入临时文件,然后将该文件传递给现有方法:

...
is = zipX.getInputStream(zipEntry);
File tmpDir = new File(System.getProperty("java.io.tmpdir"));
//For production, generate a unique name for the temp file instead of using "temp"!
File tempFile = createTempFile("temp", "zip", tmpDir);
this.getFileAsBytes(tempFile.getPath(), name);
break;
...