Correção para criação manual de ZIP com diretórios internos que abre no Linux mas não abre no Windows

Tive um problema pra gerar ZIPs com diretórios usando o código abaixo:

ZipOutputStream zipOut = new ZipOutputStream(out)
xmls.each { String conteudoXml ->
	adicionaXmlNoZip(zipOut, nomeArquivoXml, conteudoXml)
}
zipOut.close()

O zip abria 100% no ubuntu e no winrar, mas usando o leitor nativo do windows não abria.

A solução foi adicionar um zipOut.finish() antes do close.

ZipOutputStream zipOut = new ZipOutputStream(out)
xmls.each { String conteudoXml ->
	adicionaXmlNoZip(zipOut, nomeArquivoXml, conteudoXml)
}
zipOut.finish()
zipOut.close()

O ZipOutputStream escreve algumas coisas no arquivo quando chama esse finish, que o windows espera que existam.

Bruno Vieira About 7 years ago