Java 如何使用ZipEntry读取位于另一个zipfile中的一个zip文件中的数据?
我有一个zip文件(x.zip),其中有另一个zipfile(y.zip)。我需要用y.zip读取一个文件。如何遍历这两个zip文件来读取文件 下面是我用来迭代x.zip以读取y.zip的代码 在代码中,“zipX”表示“x.zip”。当遇到“y.zip”时,它满足代码中的“if条件”。在这里,我需要遍历“zipEntry”并读取其中的一个文件 如何做到这一点Java 如何使用ZipEntry读取位于另一个zipfile中的一个zip文件中的数据?,java,file,inputstream,zipfile,Java,File,Inputstream,Zipfile,我有一个zip文件(x.zip),其中有另一个zipfile(y.zip)。我需要用y.zip读取一个文件。如何遍历这两个zip文件来读取文件 下面是我用来迭代x.zip以读取y.zip的代码 在代码中,“zipX”表示“x.zip”。当遇到“y.zip”时,它满足代码中的“if条件”。在这里,我需要遍历“zipEntry”并读取其中的一个文件 如何做到这一点 private void getFileAsBytes(String path, String name) throws IOExcep
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();
}
private void getFileAsBytes(字符串路径、字符串名称)引发IOException{
ZipFile zipX=新ZipFile(路径);
枚举根据,需要传入文件对象或文件路径;不支持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;
...
如何使用递归方法直到结束??将内部InputStream
包装在一个压缩文件中,并作为普通的zip“文件”读取…@MadProgrammer如果Y.zip里面有另一个zip文件怎么办?他需要继续使用if/else块。@Vikram是的……但是他们还有什么其他选择。我会以递归方式编写方法,这样他们可以继续调用,直到找到问题的根源……我怀疑这是不可能的,除非将内部zip重新组合为一个“真实”的文件。邮政编码需要“随机”寻址邮政编码文件。