首页 > 解决方案 > 下载、解压缩并将 zip 文件解析为 Java 对象 - 无法从 ZipInputStream 读取字节

问题描述

我有以下内容,它无法像我期望的那样将字符串打印到控制台:

    String url = "http://mis.ercot.com/misdownload/servlets/mirDownload? 
                                        mimic_duns=000000000&doclookupId=698819309";
        URL obj = new URL(url.trim());
        HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
        conn.getResponseCode();
        InputStream stream = conn.getInputStream();
        ZipInputStream zis = new ZipInputStream(stream);
        byte[] buffer = new byte[1024];
        int i = zis.read(buffer);
        String str = new String(buffer, StandardCharsets.UTF_8);
        System.out.println(str);

在 URL 处,有一个 zip 文件,其中有一个 XML 文件,我最终需要对其进行解析,但现在我只需将其打印到控制台就可以了,从而确认我已成功解压缩文件。

类似以下的内容确实会生成正确的文件名称:

        ZipEntry ze = zis.getNextEntry();
        System.out.println(ze);

因此我知道我在正确的轨道上,但我不需要文件名,我什至不需要文件,我需要 XML 条目,因为我的最终目标是坚持 SQL。

标签: javaunzip

解决方案


下面的循环应该让你开始

ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
    byte contents[] = new byte[4096];
    int direct;
    while ((direct = zis.read(contents, 0, contents.length)) >= 0) {
        System.out.println(entry.getName() + ", " + direct + " bytes");
        for (byte con : contents) {
            System.out.print((char) con);
        }
    }
    System.out.println();
}

改编自How to read file from ZIP using InputStream?


推荐阅读