3
respostas

Compactar determinados arquivos de acordo com a sua extensão

Prezados, boa tarde.

Preciso compactar somente arquivos com uma determinada extensão, como por exemplo, .xml ou .pdf, porém não estou conseguindo.

No link abaixo, consegui compactar todo o diretório, porém não atende muito bem a minha necessidade, visto que ele compacta todo o diretório ou somente um arquivo específico:

http://www.staroski.com.br/2009/09/25/java-compactar-descompactar/

Poderiam me auxiliar?

Abraços!

3 respostas

Boa noite Michel,

Testei os códigos do link abaixo e ziparam normalmente:

https://www.devmedia.com.br/compactando-arquivos-em-zip-java/18798

Avisa aí se der certo.

Abraço.

Rafael, bom dia.

Agradeço sua resposta, mas como eu descrevi na minha pergunta, eu preciso compactar os arquivos de acordo com a sua extensão. Imagine a seguinte situação: em um diretório existem vários tipos de arquivo, como por exemplo, .txt, .pdf., .jpeg, .xml. Eu preciso que o código faça uma varredura de todo o diretório e compacte somente arquivos com uma determinada extensão e ignore as demais extensões.

Abraços!

Boa tarde Michel,

Você pode usar o método listFiles() da classe File, do pacote java.io, para percorrer os nomes de arquivos de um dado diretório. Um exemplo está neste link.

A seguir, você pode pegar os arquivos com as extensões desejadas e zipar. Eis um exemplo:

// extensoes a serem consideradas
List<String> extensionsToZipList = Arrays.asList("pdf","xml");

for(File path:paths) {
   // supondo extensoes sendo as 3 letras finais
   int extensionLength = path.length() - 3;

   // extensao do arquivo analisado
   String extension = path.toLowerCase().substring(extensionLength);

   // ve se, dada a extensao, o arquivo deve ser zipado
   if( extensionsToZipList.contains(extension) ) 
      Compactador.compactarParaZip(path+".zip", path);
}

O arquivo zipado será gerado no mesmo diretório do arquivo original. Além disso, não esquecer do import java.util.*; no começo do arquivo para usar List e Arrays do import java.io.*; para usar a classe File.

Avisa aí se der certo.

Abraço.