Eu olhei para a biblioteca Zip padrão que acompanha as bibliotecas de compactação JDK e Apache e estou insatisfeita com elas por três razões:
Eles estão inchados e têm um design de API ruim. Eu tenho que escrever 50 linhas de saída da matriz de bytes da placa da caldeira, entrada zip, arquivar fluxos e fechar fluxos relevantes, capturar exceções e mover os buffers de bytes por conta própria ? Por que não posso ter uma API simples que se parece com isso
Zipper.unzip(InputStream zipFile, File targetDirectory, String password = null)
eZipper.zip(File targetDirectory, String password = null)
que simplesmente funciona?Parece que descompactar descompacta destrói os metadados do arquivo e o tratamento da senha está quebrado.
Além disso, todas as bibliotecas que tentei eram 2-3x mais lentas em comparação com as ferramentas de zip da linha de comando que recebo com o UNIX?
Para mim (2) e (3) são pontos menores, mas eu realmente quero uma boa biblioteca testada com uma interface de uma linha.
fonte
Respostas:
Sei que é tarde e há muitas respostas, mas este zip4j é uma das melhores bibliotecas para compactar que já usei. É simples (sem código de caldeira) e pode lidar facilmente com arquivos protegidos por senha.
A dependência do Maven é:
fonte
Com o Apache Commons-IO ,
IOUtils
você pode fazer o seguinte:Ainda é algum código padrão, mas possui apenas uma dependência não exótica: Commons-IO
fonte
close()
, não vai doer.Extraia o arquivo zip e todas as suas subpastas, usando apenas o JDK:
Arquivos zip e todas as suas subpastas:
fonte
extractFolder(String zipFile,String extractFolder)
Outra opção que você pode conferir é o zt-zip disponível na página central e do projeto do Maven em https://github.com/zeroturnaround/zt-zip
Possui a funcionalidade padrão de compactação e descompactação (em fluxos e no sistema de arquivos) + vários métodos auxiliares para testar arquivos em um archive ou adicionar / remover entradas.
fonte
Implementação completa para compactar / descompactar uma pasta / arquivo com zip4j
Faça o download do jar aqui e adicione-o ao caminho de construção do projeto. O
class
fole pode compactar e extrair qualquer arquivo ou pasta, com ou sem proteção por senha.fonte
Um projeto muito bom é o TrueZip .
Por exemplo (do site ):
fonte
Outra opção é o JZlib . Na minha experiência, é menos "centrado em arquivos" que o zip4J; portanto, se você precisar trabalhar em blobs na memória em vez de arquivos, poderá dar uma olhada.
fonte
Há um exemplo completo aqui para compactar e descompactar arquivos recursivamente: http://developer-tips.hubpages.com/hub/Zipping-and-Unzipping-Nested-Directories-in-Java-using-Apache-Commons-Compress
fonte
Você deu uma olhada em http://commons.apache.org/vfs/ ? Alega simplificar muitas coisas para você. Mas nunca o usei em um projeto.
Também não conheço outras bibliotecas de compactação Java-Native que não sejam o JDK ou o Apache Compression.
Lembro que, uma vez que retiramos alguns recursos do Apache Ant - eles têm muitos utilitários para compactação / descompactação incorporados.
O código de exemplo com o VFS seria semelhante a:
fonte