Zipar com Java - Transformar método que zipa arquivo em método que zipe também pastas

Olá,
gostaria de ajuda para conseguir zipar uma pasta qualquer. O método abaixo consegue apenas zipar arquivos individuais. Sei que devo
implementar recursivadade mas está meio complicado de fazer. Qualquer ajuda será bem vinda.

public static void main(String argv[]) { try { compactarParaZip("c:\\teste50\\1.exe", "c:\\teste50\\1.zip"); } catch (IOException e) { e.printStackTrace(); } }

[code]public static void compactarParaZip(String arqEntrada,String arqSaida) throws IOException {
	int TAMANHO_BUFFER = 10000000;
	int cont = 0;
	byte[] dados = new byte[TAMANHO_BUFFER];

	BufferedInputStream origem = null;
	FileInputStream streamDeEntrada = null;
	FileOutputStream destino = null;
	ZipOutputStream saida = null;
	ZipEntry entry = null;

	try {
		destino = new FileOutputStream(new File(arqSaida));
		saida = new ZipOutputStream(new BufferedOutputStream(destino));
		File file = new File(arqEntrada);
		streamDeEntrada = new FileInputStream(file);
		origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER);
		entry = new ZipEntry(file.getName());
		saida.putNextEntry(entry);

		while ((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {
			saida.write(dados, 0, cont);
		}
		origem.close();
		saida.close();
	} catch (IOException e) {
		throw new IOException(e.getMessage());
	}
}[/code]

Voce pode invocar recursivamente quando for diretorio, passando todos os arquivos contidos nele.

Mas ha projetos que ja fazem isso:
http://commons.apache.org/compress/

Paulo, e quanto à este método:

// if you don't need to specify a name static void zip(File file, ZipOutputStream zos) throws IOException { zip(file, file.getName(), zos); }

[code]// name is the name for the file  
static void zip(File file, String name, ZipOutputStream zos) throws IOException  
{  
    if (file.isDirectory())  
    {  
        File[] files = file.listFiles();  
        if (files != null) // always check, in case the folder can't be read  
        {  
            for (File f: files)  
            {  
                String childName = name + "/" + f.getName();  
                zip(f, childName, zos);  
            }  
        }  
    }  
    else  
    {  
        // zip the file using the given name  
    }  
}[/code]  

Saberia me dizer como passo o diretório destino para o objeto ZipOutputStream -> ZipOutputStream zos?

Paulo, vc poderia me dar um exemplo de uso dessa biblioteca? Para gerar .zip de uma pastinha…

Definitivamente não há bons exemplos na Internet pelo menos não encontrei… Se puder dar algum exemplo seria ótimo.

Abraço,
AS

basta passar o diretorio que voce quer como File, no primeiro argumento que esse metodo zip recebe, ja que ele mesmo verifica se é diretorio.

Tem algum código pra servir base?

Ou poderia me ajudar neste método ele dá pau ler diretorio…

[code] //método para compactar arquivo e ou diretorio
public static void compactarParaZip(String arqSaida,String[] arqEntrada) throws IOException{
int cont;
byte[] dados = new byte[TAMANHO_BUFFER];

      BufferedInputStream origem = null;
      FileInputStream streamDeEntrada = null;
      FileOutputStream destino = null;
      ZipOutputStream saida = null;
      ZipEntry entry = null;
             
      try {
           destino = new FileOutputStream(new File(arqSaida));
           saida = new ZipOutputStream(new BufferedOutputStream(destino));
         
           for (int i = 0; i < arqEntrada.length; i++) {
			
        	   File file = new File(arqEntrada[i]);
               
               if(file.isDirectory()){
                   for (File arquivos : file.listFiles()) {
                       [b]streamDeEntrada = new FileInputStream(arquivos); // DA PAU!!!

[/b] origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER);
entry = new ZipEntry(arquivos.getName());
saida.putNextEntry(entry);
while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {
saida.write(dados, 0, cont);
}
}
}else{
streamDeEntrada = new FileInputStream(file);
origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER);
entry = new ZipEntry(file.getName());
saida.putNextEntry(entry);
while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {
saida.write(dados, 0, cont);
}
}

		}
          
                      
           origem.close();
           saida.close();
       } catch(IOException e) {
           throw new IOException(e.getMessage());
       }
  }[/code]

Melhor dizendo… Não dá pau não… Ele funciona quero dizer que faz o seguinte:

ex: vc tem uma pasta chamada pasta1 e dentro dela é um arquivo chamado arquivo1 e compacta junto com um arquivo chamado arquivo 2 -> ele compacta, só q quando vc descompacta aparece assim: arquivo1 e arquivo2 e não pasta1/arquivo1 e arquivo2.

http://www.guj.com.br/java/69603-tem-como-zipar-uma-pasta-inteira-em-vez-de-arquivos

Oi joyle, estou testando já… Muito obrigado pela atenção…