Como você canalizar um inputstream a um arquivo compactado como ele é lido em com Java?
-
02-07-2019 - |
Pergunta
Eu estou querendo executar um programa e como ele é executado ler na sua saída e tubo para fora a saída em um arquivo zipado. A saída do programa pode ser bastante grande, então a ideia é não prender demais na memória -. Apenas para enviá-lo para o zip como eu obtê-lo
Solução
ZipOutputStream targetStream = new ZipOutputStream(fileToSaveTo);
ZipEntry entry = new ZipEntry(nameOfFileInZipFile);
targetStream.putNextEntry(entry);
byte[] dataBlock = new byte[1024];
int count = inputStream.read(dataBlock, 0, 1024);
while (count != -1) {
targetStream.write(dataBlock, 0, count);
count = inputStream.read(dataBlock, 0, 1024);
}
Em outras palavras:
- Você cria um ZipOutputStream, dando-lhe o arquivo que você deseja gravar.
-
Você cria um ZipEntry, o que constitui um arquivo dentro desse arquivo zip. ou seja, quando você myFile.zip aberta, e há 3 arquivos lá, cada arquivo é um ZipEntry.
-
Você coloca que ZipEntry em seu ZipOutputStream
- Criar um buffer de bytes para ler seus dados em.
- Leia de sua inputStream em seu buffer de bytes, e lembre-se a contagem.
- Enquanto a contagem não é -1, gravação que byte byffer ao seu zipStream.
- Leia a próxima linha.
Feche os seus fluxos quando você está feito. Envolvê-la em um método como você vê o ajuste.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow