Problema com zip

1 resposta
jonasjgs2

boa tarde amigos,
o meu problema e o seguinte:
tenho uma classe que recebe um list com os arquivos para compactar e uma string com o
nome do arquivo que sera gerado como compactado
ate blz...

o problema e o seguinte:
quando eu tenho uma quantidade pequena de arquivos ele gera o zip normalmente
quando eu tenho uma quantidade grande ou seja a quantidade em bytes e grande
o rar e gerado sem erro porem
consigo abrir o arquivo.rar ele mostra todos os arquivos la compactados
porem se eu clicar em um deles para abrir ele fala que o arquivo esta corrompido
os arquivos que estou usando para compactar sao arquivos de video...
o arquivo gerado fica com 5 gigabytes
sera que tem alguma limitacao de tamanho para compactar
segue em anexo o codigo...

obrigado desde ja...

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class JgsZip {

	public void Compacta(List<String> ArqEntrada, String ArqSaida)
			throws IOException {
		byte[] buf = new byte[1024];

		String arquivo;

		ZipOutputStream out = new ZipOutputStream(
				new FileOutputStream(ArqSaida));

		int i;

		i = ArqEntrada.size();
		
		for (i = 0; i < ArqEntrada.size(); i++) {
			arquivo = ArqEntrada.get(i);
			FileInputStream in = new FileInputStream(arquivo);

            System.out.println("Compactando...:"+arquivo);
			out.putNextEntry(new ZipEntry(arquivo));
			
			int len;

			while ((len = in.read(buf)) > 0) {
				out.write(buf, 0, len);
			}

			in.close();
		}
		out.close();

	}

	public void DesCompacta(String ArqZip) throws IOException {
		byte[] buf = new byte[1024];

		ZipInputStream in = new ZipInputStream(new FileInputStream(ArqZip));

		ZipEntry entrada;

		while ((entrada = in.getNextEntry()) != null) {
			OutputStream out = new FileOutputStream(entrada.getName());

			int i;

			while ((i = in.read(buf)) > 0) {

				out.write(buf, 0, i);

			}
			out.close();
		}
		in.close();
	}
}

1 Resposta

E

O formato .ZIP antigo (que é o que o ZipOutputStream usa) não aceita que sejam criados arquivos maiores que 2 GB nem deixa compactar arquivos maiores que 2GB. O problema é que criar arquivos .ZIP muito grandes, mesmo com um compactador que entende esses arquivos grandes (como o WinZip ou o WinRAR), vai dar problemas na hora de abrir esse arquivo em um programa que só entende o formato antigo .ZIP (como é o caso de um programa que use ZipInputStream).

Eu recomendaria usar um programa externo e um outro formato (por exemplo, o formato .tar.bz2) para gerar arquivos tão grandes.

Criado 18 de julho de 2012
Ultima resposta 18 de jul. de 2012
Respostas 1
Participantes 2