De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Carlos Tosin
Data de Publicação: 11 de Dezembro de 2009
A compactação de dados está amplamente presente em sistemas, serviços e aplicativos. Quem nunca precisou compactar arquivos para mandar para alguém, ou então compactar dados para trafegarem pela rede?
Neste tópico apresentarei uma maneira fácil para compactar e descompactar
arquivos no formato ZIP utilizando Java. Java possui suporte a arquivos ZIP,
logo não é necessário utilizar nenhuma API extra. As classes estão localizadas
dentro do pacote java.util.zip
. As classes principais desse pacote são:
ZipEntry
, ZipFile
, ZipInputStream
e ZipOutputStream
. Para
demonstrar como a compactação e descompactação funcionam, vou mostrar a
criação de uma classe com dois métodos: zip()
e unzip()
. Todo o
"trabalho sujo" fica por conta da classe. O código-fonte pode ser visualizado
no final deste tutorial.
Vamos começar pelo método zip()
. O método zip()
recebe dois parâmetros:
o primeiro é a lista de arquivos a serem zipados; e o segundo é o arquivo
ZIP que será gerado. O código deste método é bastante simples porque toda
a lógica de compactação se encontra no método zipFiles()
.
O método zipFiles()
é reponsável por iterar sobre a lista de arquivos e
adicioná-los ao arquivo ZIP de saída. Esta tarefa seria simples, mas às vezes
queremos compactar não apenas arquivos, mas também estruturas de diretórios
dentro do nosso arquivo ZIP. E para manter essa estrutura de diretórios de
forma correta, devemos programar este comportamento manualmente.
Observe que, caso uma das entradas que deve aparecer no arquivo ZIP seja
um diretório, o método zipFiles()
é chamado recursivamente, passando
como parâmetro a lista de arquivos do diretório. Esta abordagem possibilita
que o método processe todos os arquivos de cada diretório, de uma forma
semelhante à busca em profundidade que aprendemos nas aulas de Estruturas
de Dados. Junto com a lista de arquivos, também é fornecida uma pilha com os
nomes dos diretórios onde o arquivo se encontra. Essa informação é utilizada
na reconstrução do caminho do arquivo dentro do arquivo ZIP.
Já para descompactar, temos o método unzip()
. O método unzip()
recebe dois parâmetros: o arquivo ZIP a ser descompactado e um diretório
para a descompactação. No caso da descompactação é feito o caminho inverso
da compactação. Cada entrada do arquivo ZIP é lida e gravada no sistema de
arquivos. Caso a entrada seja um diretório, a estrutura de diretórios deve
primeiramente ser criada e só então o arquivo deve ser descompactado (o
Java não cria os diretórios automaticamente, ficando a cargo do programador
garantir a criação dos diretórios necessários).
Esses dois métodos representam uma solução básica e bem completa para compactar e descompactar arquivos. Recomendo que você inclua esta funcionalidade em um componente, a fim de que possa ser usado em diferentes projetos.
Download do código fonte do programa
Carlos Tosin é instrutor oficial do Curso On-Line de Fundamentos de Java (assista uma vídeo-aula grátis) da Softblue, formado em Ciência da Computação pela PUC-PR, pós-graduado em Desenvolvimento de Jogos para Computador pela Universidade Positivo e Mestre em Informática na área de Sistemas Distribuídos, também pela PUC-PR. Trabalha profissionalmente com Java há 7 anos e possui 4 anos de experiência no desenvolvimento de sistemas para a IBM dos Estados Unidos, utilizados a nível mundial. Atua há mais de 2 anos com cursos e treinamentos de profissionais em grandes empresas. Possui as certificações da Sun SCJP, SCJD, SCWCD, SCBCD, SCEA, IBM SOA e ITIL Foundation.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários