如何在Java中读取.zip文件中的文件?

4

我想解析一个.zip文件。该文件包含一个文件夹,而该文件夹又包含多个文件。我希望读取所有文件,但不需要将.zip文件写入磁盘。我有以下代码:

        zipFile = new ZipFile(file);
        Enumeration<? extends ZipEntry> entries = zipFile.entries();

        while(entries.hasMoreElements()){
            ZipEntry entry = entries.nextElement();
            InputStream stream = zipFile.getInputStream(entry);
            InputStreamReader reader = new InputStreamReader(stream, "UTF-8");
            Scanner inputStream = new Scanner(reader);
            inputStream.nextLine();

            while (inputStream.hasNext()) {
                String data = inputStream.nextLine(); // Gets a whole line
                String[] line = data.split(SEPARATOR); // Splits the line up into a string array
            }

            inputStream.close();
            stream.close();
        }
        zipFile.close();

问题在于这仅适用于文件直接存储在.zip文件中时才有效。我应该如何修改我的代码,以便在.zip文件中的文件位于文件夹中时也能正常工作?


3
使用 entry.isDirectory() 方法可以判断 ZipEntry 是否为目录。该方法返回一个布尔值,如果是目录则为 true,否则为 false。具体使用可参考 Java 官方文档中的说明。 - Paolof76
1个回答

3

你可以将读取内容的代码放在一个if语句中。

ZipEntry entry = entries.nextElement();
if (!entry.isDirectory()) {
    InputStream stream = zipFile.getInputStream(entry);
...
    stream.close();
}

谢谢您的回答。这将跳过目录,但实际文件位于该目录内,这意味着我必须进入该目录。因此,我的.zip文件包含一个名为“x”的文件夹。在这个文件夹里有文件x/file1.csv、x/file2.csv。那么我该如何读取这些文件呢? - machinery
但它确实会遍历目录中的条目。 - radoh
哦,我得检查一下。 - machinery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接