Java 将XML压缩到GZIPOutputStream中

Java 将XML压缩到GZIPOutputStream中,java,xml,stax,jaxp,Java,Xml,Stax,Jaxp,我试图使用staxapi创建一些XML,将其保存在FileOutputStream中,并将该流放入GZIPOutPutStream中 显然,我做错了什么,因为下面的代码输出了一个损坏的文件:hellow.xml.gz。我可以打开zip文件,看到里面的xml文件。但是在提取时,我得到一个错误,说文件已损坏 如果我输出到一个文本文件,而不是试图用GZIPOutPutStream压缩文件,那么代码只在文件中工作。如何让xml正确写入并压缩到gzip中 public class Main {

我试图使用staxapi创建一些XML,将其保存在FileOutputStream中,并将该流放入GZIPOutPutStream中

显然,我做错了什么,因为下面的代码输出了一个损坏的文件:hellow.xml.gz。我可以打开zip文件,看到里面的xml文件。但是在提取时,我得到一个错误,说文件已损坏

如果我输出到一个文本文件,而不是试图用GZIPOutPutStream压缩文件,那么代码只在文件中工作。如何让xml正确写入并压缩到gzip中

public class Main {

    public static void main(String[] args) throws XMLStreamException, IOException {

        FileOutputStream outputStream = new FileOutputStream(new File("/home/user/hellow.xml.gz"));
        GZIPOutputStream outputStreamZip = new GZIPOutputStream(outputStream);
        XMLOutputFactory factory = XMLOutputFactory.newInstance();

        XMLStreamWriter writer = factory.createXMLStreamWriter(outputStreamZip, "UTF-8");

        writer.writeStartElement("WOOOOOOOOOOOOOOOOOOOOOOOOOOOOT");
        writer.writeStartElement("Lookup_Value_Record");
        writer.writeCharacters("Hello World");

        writer.writeEndElement();
        writer.writeEndElement();
        writer.writeEndDocument();

        writer.flush();
        writer.close();

    }
}

答案很简单。我只需要关闭Gzip输出流

outputStreamZip.close();

此代码不输出.txt文件。我建议您不要运行您认为正在运行的代码。您一定是正确的EJP,因为当我现在运行它时,它输出的是损坏的gzip文件,而不是文本文件。我更新了问题以反映这一点。