Сжатие XML в GZIPOutputStream

Я пытаюсь использовать StaX API для создания некоторого 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();

    }
}

person user2725919    schedule 01.10.2015    source источник
comment
Этот код не выводит файл .txt. Я предлагаю вам не запускать код, который, по вашему мнению, вы используете.   -  person user207421    schedule 01.10.2015
comment
Вы, должно быть, были правы, EJP, потому что, когда я запускаю его, он выводит поврежденный файл gzip, а не текстовый файл. Я обновил вопрос, чтобы отразить это.   -  person user2725919    schedule 01.10.2015


Ответы (1)


Ответ был очень и очень прост. Мне просто нужно было закрыть выходной поток Gzip.

outputStreamZip.close();
person user2725919    schedule 02.10.2015