Eu preciso de um pequeno trecho de código que descompacte alguns arquivos de um determinado arquivo .zip e forneça os arquivos separados de acordo com o formato em que estavam no arquivo compactado. Por favor, poste seu conhecimento e me ajude.
131
Respostas:
A versão do peno havia otimizado um pouco. O aumento no desempenho é perceptível.
fonte
ze
for um diretório. Tentar executar essas operações causará uma exceção.Com base na resposta de Vasily Sochinsky, um pouco aprimorada e com uma pequena correção:
Diferenças notáveis
public static
- este é um método utilitário estático que pode estar em qualquer lugar.File
parâmetros porqueString
são: / para arquivos e não foi possível especificar onde o arquivo zip deve ser extraído antes. Tambémpath + filename
concatenação> https://stackoverflow.com/a/412495/995891throws
- porque pega tarde - adicione uma tentativa se realmente não estiver interessado nelas.mkdirs()
é importante.finally
para evitar vazamentos de recursos.assim
deve fazer o equivalente ao original
fonte
UTF8 format
. Então, usei esse código que usa acommons-compress
biblioteca do apache .Este é o meu método de descompactar, que eu uso:
fonte
O Android possui uma API Java incorporada. Confira o pacote java.util.zip .
A classe ZipInputStream é o que você deve procurar. Leia ZipEntry no ZipInputStream e despeje-o na pasta / sistema de arquivos. Confira um exemplo semelhante para compactar no arquivo zip .
fonte
O caminho Kotlin
Uso
fonte
Embora as respostas que já estão aqui funcionem bem, descobri que elas eram um pouco mais lentas do que eu esperava. Em vez disso, usei o zip4j , que eu acho que é a melhor solução devido à sua velocidade. Também permitia opções diferentes para a quantidade de compactação, o que eu achei útil.
fonte
ATUALIZAÇÃO 2016 use a seguinte classe
Como usar
Permissões
fonte
De acordo com a resposta @zapl, descompacte com o relatório de progresso:
fonte
-> Classe auxiliar (Unzipper.java)
-> layout xml (activity_main.xml):
-> permissão no arquivo Menifest:
fonte
Aqui está um ZipFileIterator (como um Iterator java, mas para arquivos zip):
fonte
Exemplo mínimo que usei para descompactar um arquivo específico do meu arquivo zip na pasta de cache de aplicativos. Depois, li o arquivo de manifesto usando um método diferente.
fonte
Estou trabalhando com arquivos zip que a classe ZipFile do Java não pode manipular. Aparentemente, o Java 8 não consegue lidar com o método de compressão 12 (acredito que o bzip2). Depois de tentar vários métodos, incluindo o zip4j (que também falha com esses arquivos específicos devido a outro problema), tive êxito com o commons-compress do Apache, que suporta métodos de compactação adicionais, como mencionado aqui .
Observe que a classe ZipFile abaixo não é a da java.util.zip.
Na verdade, é org.apache.commons.compress.archivers.zip.ZipFile, portanto, tenha cuidado com as importações.
Para Gradle:
fonte
Com base na resposta do zapl, a adição de
try()
aroundCloseable
fecha os fluxos automaticamente após o uso.Usando
Constant.DefaultBufferSize
(65536
) obtido deC# .NET 4
Stream.CopyTo da resposta de Jon Skeet aqui: https://stackoverflow.com/a/411605/1876355Eu sempre vejo posts usando
byte[1024]
oubyte[4096]
buffer, nunca soube que ele pode ser muito maior, o que melhora o desempenho e ainda está funcionando perfeitamente normal.Aqui está o
Stream
código-fonte: https://referencesource.microsoft.com/#mscorlib/system/io/stream.csNo entanto, eu liguei de volta para o
65536
qual também é um múltiplo de4096
apenas para ser seguro.fonte
Arquivo Zip protegido por senha
se você deseja compactar arquivos com senha, consulte esta biblioteca que pode compactar arquivos com senha com facilidade:
Fecho eclair:
Descompactar:
Rar:
A documentação desta biblioteca é boa o suficiente, acabei de adicionar alguns exemplos a partir daí. É totalmente gratuito e escreveu especialmente para o Android.
fonte