Java.util.zip

DEUS SEJA LOUVADO!

Alô pessoal, beleza?

Estou querendo desenvolver uma aplicação que tem uma opção que faz um backup de alguns arquivos e eu quero zipar esses arquivos… Eu usei o Runtime para usar o Pkzip externo para zipar, só que aí fica um programa dependente do windows e eu não quero isso… Estou olhando a documentação da java.util.zip mas estou enfrentando dificuldades em como começar a desenvolver com esta classe. Será que alguém aqui poderia me mandar um pequeno exemplo de como utilizar essas classes para me dar uma luz? Um pequeno exemplozinho já me ajuda…

Desde já agradeço.

Meu caro Adler, o jeito mais fácil de fazer um zip é usando o ZipOutputStream.

Só que se vc quer ter múltiplos arquivos, vai ter que fazer múltiplas entradas. Suponha que vc tem um método externo copyStream que copia um Stream pra outro. Pra escrever um arquivo, vc teria que abrí-lo num InputStream “is” e escrever todo o conteúdo dele no zip, associando-o a uma entrada “entry”:

is = new FileInputStream(fileName);
ZipEntry entry = new ZipEntry(fileName);
zip.putNetxEntry(entry); // "zip" é o arquivo zip
copyStream(is, zip); // este é o método que eu falei

Este seria o seu laço de adicionar um arquivo só. Cada arquivo novo terá uma ZipEntry, e o ZipOutputStream compacta sozinho. Claro que se vc quer fazer um Winzip em Java, vai ter que mexer bem mais com essa ZipEntry, por exemplo, explicando o que é diretório e o que não é, etc.

Não ensinei nada, mas acho que deu pra pegar a idéia, né? O difícil de entender aqui não é o Java em si, mas o formato ZIP, que beira o lixo pra quem tem que manipular, mas é um tesão pra usar.

Falous,
Tiago.

DEUS SEJA LOUVADO!

Muito obrigado pela dica dukejeffrie.

Eu vou tentar usar daqui a pouco, deu pra pegar a idéia mais ou menos…

O lance é até meio chato pelo que vi mas é muito útil… só de podermos compactar algo sem necessitar de um programa externo (que era o que estava fazendo) já vale a pena o trabalho.
Além do que usando programa externo, nós acabamos com a portabilidade do sistema e aí limitamos uma (se não for a maior) vantagem do java que é a portabilidade.

Valeu !!!