我有一个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();
}
答案 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;
...