You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何读取zip压缩包内的XML文件并输出原始文本

问题解答

1. InputStreamReader能否读取XML文件

可以,XML本质是结构化文本文件,InputStreamReader作为字节流转字符流的桥梁,完全支持读取XML文本内容。

2. 当前代码的问题

你遇到的输出异常是代码逻辑错误直接导致的,核心问题如下:

  • 最关键的错误:readLine()方法被重复调用,while判断条件里已经读取了一行内容但没有保存,循环体里再次调用readLine()才打印,会直接丢弃所有奇数行内容,最终输出残缺甚至看起来全是空行。
  • 空catch块吞掉了所有异常,就算出现编码错误、文件读取错误也不会输出报错信息,无法定位问题。
  • 没有指定字符编码,InputStreamReader默认使用系统编码,如果XML的编码和系统编码不一致就会出现乱码。
  • 没有主动关闭流资源,会造成JVM资源泄漏。

3. 修复后的可运行代码

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class TestDenemeZipExtract {
    public static void main(String[] args) {
        // try-with-resources语法会自动关闭资源,无需手动写close逻辑
        try (ZipFile zipFile = new ZipFile("/home/user/Documents/file.zip", StandardCharsets.UTF_8)) {
            Enumeration<? extends ZipEntry> entries = zipFile.entries();

            while (entries.hasMoreElements()) {
                ZipEntry entry = entries.nextElement();
                // 跳过压缩包内的目录项
                if (entry.isDirectory()) continue;
                
                if (entry.getName().endsWith(".xml")) {
                    try (InputStream stream = zipFile.getInputStream(entry);
                         BufferedReader bf = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))) {
                        String line;
                        // 单次调用readLine,保存到变量后再做判断和打印
                        while ((line = bf.readLine()) != null) {
                            System.out.println(line);
                        }
                    }
                }
            }
        } catch (Exception e) {
            // 打印异常栈方便定位问题,不要吞异常
            e.printStackTrace();
        }
    }
}

4. 适配说明

如果你的XML文件不是UTF-8编码,把代码里的StandardCharsets.UTF_8替换为对应编码即可,比如GBK编码可改为Charset.forName("GBK")。

内容的提问来源于stack exchange,提问作者amma velakin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:15:02