Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

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 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 
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 ↩


This post first appeared on PROGRAMERO, please read the originial post: here

Share the post

Compactando arquivos (Android)

×

Subscribe to Programero

Get updates delivered right to your inbox!

Thank you for your subscription

×