Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ZipEntry读取位于另一个zipfile中的一个zip文件中的数据?_Java_File_Inputstream_Zipfile - Fatal编程技术网

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

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

我有一个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 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重新组合为一个“真实”的文件。邮政编码需要“随机”寻址邮政编码文件。