Pular para o conteúdo principal

Compactando arquivos (Android)

Dica rápida!

Segue uma dica rápida para realizar a compactação de arquivos no Android, não deixem de visitar o artigo original1

Classe

import android.util.Log; 
import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipOutputStream; 


public class Compress { 
  private static final int BUFFER = 2048; 

  private String[] _files; 
  private String _zipFile; 

  public Compress(String[] files, String zipFile) { 
    _files = files; 
    _zipFile = zipFile; 
  } 

  public void zip() { 
    try  { 
      BufferedInputStream origin = null; 
      FileOutputStream dest = new FileOutputStream(_zipFile); 

      ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest)); 

      byte data[] = new byte[BUFFER]; 

      for(int i=0; i < _files.length; i++) { 
        Log.v("Compress", "Adding: " + _files[i]); 
        FileInputStream fi = new FileInputStream(_files[i]); 
        origin = new BufferedInputStream(fi, BUFFER); 
        ZipEntry entry = new ZipEntry(_files[i].substring(_files[i].lastIndexOf("/") + 1)); 
        out.putNextEntry(entry); 
        int count; 
        while ((count = origin.read(data, 0, BUFFER)) != -1) { 
          out.write(data, 0, count); 
        } 
        origin.close(); 
      } 

      out.close(); 
    } catch(Exception e) { 
      e.printStackTrace(); 
    } 

  } 

} 

Exemplo de uso

Propriedades para usar a classe:
private static final int BUFFER = 2048; 
private String[] _files; 
private String _zipFile; 
A propriedads BUFFER é usada para leitura dos dados e escrita no stream, o array _files armazenará o nome dos arquivos que serão compactados (juntamente com seus caminhos) e _zipFile será o nome que o arquiv and the third is the name of the zip file (path as well).
Construtor:
public Compress(String[] files, String zipFile) { 
  _files = files; 
  _zipFile = zipFile; 
} 
O construtor recebe um array de arquivos e um nome para o arquivo compactado, armazenando ambos no propriedades.
Método para compactar:
BufferedInputStream origin = null; 
FileOutputStream dest = new FileOutputStream(_zipFile); 
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest)); 
byte data[] = new byte[BUFFER]; 
A primeira coisa a ser feita é configurar nosso BufferedInputStream, que será usado para ler os dados dos arquivos (para cada um existente em nosso array).
O FileOutputStream será usado para criar o arquivo compactado (arquivo destino) e também será usado pelo objeto de escrita ZipOutputStream.
Para mais detalhes sobre FileOutputStream e ZipOutputStream .
for(int i=0; i < _files.length; i++) { 
  Log.v("Compress", "Adding: " + _files[i]); 

  FileInputStream fi = new FileInputStream(_files[i]); 
  origin = new BufferedInputStream(fi, BUFFER); 

  ZipEntry entry = new ZipEntry(_files[i].substring(_files[i].lastIndexOf("/") + 1)); 
  out.putNextEntry(entry); 

  int count; 
  while ((count = origin.read(data, 0, BUFFER)) != -1) { 
    out.write(data, 0, count); 
  } 

  origin.close(); 
} 

out.close(); 
Agora o loop principal, onde cada arquivo em nosso array _files será compactado dentrodo arquivo zip.
Primeiro o FileInputStream é configurado para a leitura dos arquivos, o BufferedInputStream irá manipular a quantidade de dados que serão lidos por vez, com base em nosso BUFFER.
O ZipEntry é usado para adicionar o arquivo atual na estrutura, por exemplo, se adicionarmos mnt/sdcard/data/myzip.zip’, será criado essaestrutura de diretório dentro do arquivo zip, logo se a intenção for a de adicionar apenas o arquivo (sem a estrutura de diretório) deve-se alterar esse comportamento.
Uma vez que o objeto entry tenha sido carregado, podemos adicionalo ao zip(out.putNextEntry).
Por fim temos outro loop, usado para ler os dados (2048 bytes por vez) e escrever o arquivo compactado.
A ultima etapa fica por conta do fechamento dos streams.

  1. jon simon Jon Simon’s Personal Development Site

Comentários

Mais visitadas

Lista de políticos com ficha suja

ATUALIZAÇÃO (08/03/2012 ano de eleição) Representantes de duas pessoas da lista (Eliseu Padilha e Alex Canziani) entraram em contato e pediram que esses fossem removidos, alegando que não houve condenação. É justo essa requisição, porém vale lembrar que escândalos nacionalmente reconhecidos de corrupção não deram em nada, por isso o que realmente conta nesse ano de eleição é uma pesquisa minuciosa sobre os candidatos escolhidos, eu particularmente, por não estar nem um pouco satisfeito, não irei votar em ninguém que já tenha sido eleito. Estou voltando a postar por um motivo nobre, meu tempo continua apertado mas esse post é rápido, na verdade nem meu ele é (visitem o espaço de nosso amigo Lord ), estou apenas repassando essa valiosa informação. Teremos eleição esse ano, e é importante não repetirmos erros passados, vamos ficar atentos em relação a esses nomes e exclui-los de vez do cenário politico nacional. Façamos nossa parte, publicando em nossos blog...

Alterar cores do PageControl (Delphi)

O padrão Windows todo cinza não é muito atraente, por isso quando nos utilizarmos do PageControl podemos alterar suas cores e fontes da seguinte maneira: Em primeiro lugar devemos alterar a propriedade OwnerDraw para TRUE ; Depois implementar seu método DrawTab da seguinte maneira: //pinta a fonte Control.Canvas.Font.Color:=clBlack; // // pinta a paleta / aba Control.Canvas.brush.Color:=clSkyBlue; PageControl1.Canvas.Rectangle(Rect); Control.Canvas.TextOut(Rect.left+5,Rect.top+3,PageControl1.Pages[tabindex].Caption); // pinta a parte interna (tabsheet) PageControl1.Pages[TabIndex].brush.Color := Control.Canvas.brush.Color; PageControl1.Pages[TabIndex].Repaint; Caso a intenção seja manter cada aba com seu próprio estilo basta adicionar um CASE filtrando o índice das abas: case TabIndex of   0: Control.Canvas.Font.Color:=clBlack;   1: Control.Canvas.Font.Color:=clWindow; ...

Aplicação Flask usando Nginx e Gunicorn

Aplicação Flask usando Nginx e Gunicorn Se você já desenvolveu uma aplicação Flask básica, sabe que o servidor de desenvolvimento embutido não é ideal para produção. Ele não é projetado para lidar com altos volumes de tráfego ou conexões simultâneas. Para tornar sua aplicação Flask mais robusta e pronta para produção, podemos usar o Gunicorn como servidor de aplicação e o Nginx como proxy reverso. Neste artigo, vamos adaptar o exemplo anterior ( Criando uma Aplicação CRUD com Flask, PostgreSQL e Docker ) para incluir o Nginx e o Gunicorn. O que são Nginx e Gunicorn? Gunicorn O Gunicorn (Green Unicorn) é um servidor de aplicação WSGI que roda aplicações Python como o Flask. Ele é eficiente e simples de configurar, lidando com múltiplas requisições ao mesmo tempo, algo que o servidor embutido do Flask não faz bem. Nginx O Nginx é um servidor web que atua como um proxy reverso. Ele recebe requisições HTTP e as encaminha ao Gunicorn. Além disso, o Nginx pode: Servir arquivos ...