Ципиране на 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