Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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中使用ZipFile类递归打开所有文件,包括文件夹下的文件_Java_Extract_Zipfile - Fatal编程技术网

如何在Java中使用ZipFile类递归打开所有文件,包括文件夹下的文件

如何在Java中使用ZipFile类递归打开所有文件,包括文件夹下的文件,java,extract,zipfile,Java,Extract,Zipfile,我正在用Java创建一个方法来打开zipfile并在zip中动态处理Excel文件。我正在使用Java中的API ZipFile,希望按照内存中的方式处理ZipFile,而不将其提取到文件系统中 到目前为止,我能够遍历zip文件,但是在zip文件的目录下列出文件时遇到了问题。Excel文件可以位于zip文件中的文件夹中。 下面是我当前的代码,在我遇到问题的部分有一条注释。 非常感谢您的帮助:) 请看一看和 publicstaticvoid解压(最终ZipFile-ZipFile,最终文件目录)

我正在用Java创建一个方法来打开zipfile并在zip中动态处理Excel文件。我正在使用Java中的API ZipFile,希望按照内存中的方式处理ZipFile,而不将其提取到文件系统中

到目前为止,我能够遍历zip文件,但是在zip文件的目录下列出文件时遇到了问题。Excel文件可以位于zip文件中的文件夹中。 下面是我当前的代码,在我遇到问题的部分有一条注释。 非常感谢您的帮助:)

请看一看和

publicstaticvoid解压(最终ZipFile-ZipFile,最终文件目录)
抛出IOException{

最终枚举Zip条目实际上没有关于文件夹或目录的任何概念,它们都存在于Zip文件的同一个概念根中。允许将文件组织到“文件夹”中的是Zip条目的名称

zip条目之所以被视为目录,是因为它实际上不包含任何压缩字节,并且被标记为压缩字节

目录项是一个标记,使您有机会构造使用相同路径前缀的文件需要提取到的路径

这意味着,您不需要真正关心目录条目,只需预映射即可创建以下任何文件可能需要的输出文件夹

public static void main(String[] args) {
    try {
        ZipFile zip = new ZipFile(new File("C:\\sample.zip"));
        for (Enumeration e = zip.entries(); e.hasMoreElements(); ) {
            ZipEntry entry = (ZipEntry) e.nextElement();

            String currentEntry = entry.getName();

            if (entry.isDirectory()) {
                /*I do not know how to get the files underneath the directory
                  so that I can process them */
                InputStream is = zip.getInputStream(entry);
            } else {
                InputStream is = zip.getInputStream(entry);
            }
        }
    } catch (ZipException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}