Zipar com Java - Transformar método que zipa arquivo em método que zipe também pastas
10 respostas
A
andredecotia
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.
// if you don't need to specify a name staticvoidzip(Filefile,ZipOutputStreamzos)throwsIOException{zip(file,file.getName(),zos);}
// name is the name for the file staticvoidzip(Filefile,Stringname,ZipOutputStreamzos)throwsIOException{if(file.isDirectory()){File[]files=file.listFiles();if(files!=null)// always check, in case the folder can't be read {for(Filef:files){StringchildName=name+"/"+f.getName();zip(f,childName,zos);}}}else{// zip the file using the given name }}
Saberia me dizer como passo o diretório destino para o objeto ZipOutputStream -> ZipOutputStream zos?
A
andredecotia
Paulo, vc poderia me dar um exemplo de uso dessa biblioteca? Para gerar .zip de uma pastinha…
A
andredecotia
Definitivamente não há bons exemplos na Internet pelo menos não encontrei… Se puder dar algum exemplo seria ótimo.
Abraço,
AS
Paulo_Silveira
basta passar o diretorio que voce quer como File, no primeiro argumento que esse metodo zip recebe, ja que ele mesmo verifica se é diretorio.
A
andredecotia
Tem algum código pra servir base?
A
andredecotia
Ou poderia me ajudar neste método ele dá pau ler diretorio...
//método para compactar arquivo e ou diretoriopublicstaticvoidcompactarParaZip(StringarqSaida,String[]arqEntrada)throwsIOException{intcont;byte[]dados=newbyte[TAMANHO_BUFFER];BufferedInputStreamorigem=null;FileInputStreamstreamDeEntrada=null;FileOutputStreamdestino=null;ZipOutputStreamsaida=null;ZipEntryentry=null;try{destino=newFileOutputStream(newFile(arqSaida));saida=newZipOutputStream(newBufferedOutputStream(destino));for(inti=0;i<arqEntrada.length;i++){Filefile=newFile(arqEntrada[i]);if(file.isDirectory()){for(Filearquivos:file.listFiles()){[b]streamDeEntrada=newFileInputStream(arquivos);// DA PAU!!![/b]origem=newBufferedInputStream(streamDeEntrada,TAMANHO_BUFFER);entry=newZipEntry(arquivos.getName());saida.putNextEntry(entry);while((cont=origem.read(dados,0,TAMANHO_BUFFER))!=-1){saida.write(dados,0,cont);}}}else{streamDeEntrada=newFileInputStream(file);origem=newBufferedInputStream(streamDeEntrada,TAMANHO_BUFFER);entry=newZipEntry(file.getName());saida.putNextEntry(entry);while((cont=origem.read(dados,0,TAMANHO_BUFFER))!=-1){saida.write(dados,0,cont);}}}origem.close();saida.close();}catch(IOExceptione){thrownewIOException(e.getMessage());}}
A
andredecotia
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.