5 de fevereiro de 2012

UnZip Files - Java

Uma das ferramentas mais utilizadas no desktop é a compressão e descompressão de arquivos em um único arquivo, ou melhor, o zip desses arquivos. Podemos fazer um zip para obter informações dentro de um aplicativo Android, por exemplo imagens que contenham informações, oa invés de fazer toda vez uma requisição online (GET).

Felizmente, podemos utilizar deste recurso no Android através de códigos Java, onde iremos introduzir nosso arquivo ZIP na pasta assets do projeto.


Para isso, devemos criar uma classe que nos auxiliará neste processo, seu construtor deve ter o parâmetro de todos os RESOURCES do projeto e ela deve herdar de Thread para que seja um processo assíncrono ao da Activity do aplicativo.
A primeira coisa que devemos fazer é declarar o caminho até a pasta onde salvaremos todos os arquivos do zip, e claro, devemos também verificar se ele existe, pois se ele não existir, devemos criar esse diretório no SD CARD do aparelho.
  • public void unzip() {
  •    private String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Zip";
  •    private boolean mounted =       Environment.getExternalStorageDirectory().equals(Environment.MEDIA_MOUNTED);

  •    File f = new File(path);
  •    if(mounted) {
  •       if(!dir.exists()) {
  •          dir.mkdir();
  •       }
  •    
  •       try {
  •          InputStream is = this.resources.getAssets().open("meuArquivo.zip");
  •          byte[] buffer = new byte[1024];
  •          
  •          ZipInputStream zipStream = new ZipInputStream(is);
  •          ZipEntry entry = zipStream.getNextEntry();
  •          
  •          while (entry != null) {
  •             f = new File(path + "/" + entry.getName());
  •             
  •             if(f.getAbsolutePath().contains(".")) {
  •                // É um arquivo...
  •                FileOutputStream fos = new FileOutputStream(f);

  •                 int i;
  •                 while((i = zipStream.read(buffer, 0, 1024)) > -1) {
  •                    fos.write(buffer, 0, i);
  •                 }

  •                 fos.close();
  •                 zipStream.closeEntry();

  •             } else {
  •                 // É um diretório...
  •                 f.mkdir();
  •             }

  •              entry = zipStream.getNextEntry();

  •          }
  •          zipStream.close();
  •       } catch (IOException e) {
  •          e.printStackTrance();
  •       }
  •    }
  • }
Fácil né? :)
Agora é moleza, em sua activity a unica coisa que você precisa fazer é instanciar a nossa Thread e chamar o método run() dele.

[]'s

Felipe Bonezi

Nenhum comentário:

Postar um comentário