Arquivos ZIP em Java
CheatsNaNet :: Programação :: Java
Página 1 de 1
Arquivos ZIP em Java
Compactando arquivos com Java
Java possui um pacote de classes que permitem compactação de dados. Vejamos como é fácil compactar todos os arquivos de uma pasta.
O primeiro passo é importar as classes que usaremos:
Do pacote java.io usaremos classes para manipular fluxos (streams) de entrada e saída de dados. Ao passo que no pacote java.util.zip estão as classes que farão a compactação
dos dados.
É recomendado estudar a documentação desses dois pacotes, facilitará o entendimento.
java.util.zip (Java 2 Platform SE v1.4.2)
java.io (Java 2 Platform SE v1.4.2)
Vamos ao código e depois daremos uma passada nas partes importantes.
Esta é a nossa classe Compactador, percebe-se que usaremos seu método compactar() para compactar todos os arquivos da pasta onde nossa classe está. Para usar o método é necessário instanciar um objeto da classe, por exemplo:
O método recebe uma String como argumento com o nome do arquivo a ser criado. Ex.:"arquivo.zip".
1.1 Armazenadores
Vamos dar uma geral nas variáveis do método compactar.
1.2 Primeira parte importante
1.3 Compactação
Para serem compactado, os arquivos têm que ser abertos, lidos e seus conteúdos escritos como entrada (entry) no arquivo ZIP. Isto é feito, arquivo por arquivo, percorrendo os elementos do array arquivos. É o que vemos no código abaixo.
O fragmento abaixo merece uma atenção especial.
É aqui que dizemos para saida que estamos enviando um novo arquivo (entrada).
Depois de informamos isto, podemos gravar (de 2 em 2 KB, lembra?) os dados no arquivo ZIP.
O resto do código é bastante simples, vale lembrar que sempre após ler ou gravar um arquivo, o seu stream deve ser fechado (origem.close(), saida.close()).
Enfim, um código bem simples que pode ser muito bem explorado em aplicações diversas.
Java possui um pacote de classes que permitem compactação de dados. Vejamos como é fácil compactar todos os arquivos de uma pasta.
O primeiro passo é importar as classes que usaremos:
- Código:
[list=1][*]import java.io.*;[*] import java.util.zip.*;[/list]import java.io.*; import java.util.zip.*;
Do pacote java.io usaremos classes para manipular fluxos (streams) de entrada e saída de dados. Ao passo que no pacote java.util.zip estão as classes que farão a compactação
dos dados.
É recomendado estudar a documentação desses dois pacotes, facilitará o entendimento.
java.util.zip (Java 2 Platform SE v1.4.2)
java.io (Java 2 Platform SE v1.4.2)
Vamos ao código e depois daremos uma passada nas partes importantes.
- Código:
[list=1][*]package br.com.javafree.tutoriais.arquivosZipEmJava;[*][*]import java.io.*;[*]import java.util.zip.*;[*][*]public class Compactador {[*][*] // ------------------------------------------------ Constantes[*] static final int TAMANHO_BUFFER = 2048; // 2kb[*][*][*] // ------------------------------------------------ Métodos públicos[*] public void compactar (String arqSaida) {[*] int i, cont;[*] byte[] dados = new byte[TAMANHO_BUFFER];[*] String arquivos[];[*] File f = null;[*] BufferedInputStream origem = null;[*] FileInputStream streamDeEntrada = null;[*] FileOutputStream destino = null;[*] ZipOutputStream saida = null;[*] ZipEntry entry = null;[*][*] try {[*] destino = new FileOutputStream(arqSaida);[*] saida = new ZipOutputStream(new BufferedOutputStream(destino));[*] f = new File("."); // Todos os arquivos da pasta onde a classe está[*] arquivos = f.list();[*][*] for (i = 0; i < arquivos.length; i++) {[*] File arquivo = new File(arquivos[i]);[*][*] if (arquivo.isFile() && !(arquivo.getName()).equals(arqSaida)) {[*] System.out.println("Compactando: " + arquivos[i]);[*][*] streamDeEntrada = new FileInputStream(arquivo);[*] origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER);[*] entry = new ZipEntry(arquivos[i]);[*] saida.putNextEntry(entry);[*][*] while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {[*] saida.write(dados, 0, cont);[*] }[*][*] origem.close();[*] }[*] }[*][*] saida.close();[*][*] } catch(Exception e) {[*] e.printStackTrace();[*] }[*] }//fim compactar()[*]}//Compactador.class[/list]package br.com.javafree.tutoriais.arquivosZipEmJava; import java.io.*; import java.util.zip.*; public class Compactador { // ------------------------------------------------ Constantes static final int TAMANHO_BUFFER = 2048; // 2kb // ------------------------------------------------ Métodos públicos public void compactar (String arqSaida) { int i, cont; byte[] dados = new byte[TAMANHO_BUFFER]; String arquivos[]; File f = null; BufferedInputStream origem = null; FileInputStream streamDeEntrada = null; FileOutputStream destino = null; ZipOutputStream saida = null; ZipEntry entry = null; try { destino = new FileOutputStream(arqSaida); saida = new ZipOutputStream(new BufferedOutputStream(destino)); f = new File("."); // Todos os arquivos da pasta onde a classe está arquivos = f.list(); for (i = 0; i < arquivos.length; i++) { File arquivo = new File(arquivos[i]); if (arquivo.isFile() && !(arquivo.getName()).equals(arqSaida)) { System.out.println("Compactando: " + arquivos[i]); streamDeEntrada = new FileInputStream(arquivo); origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER); entry = new ZipEntry(arquivos[i]); saida.putNextEntry(entry); while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) { saida.write(dados, 0, cont); } origem.close(); } } saida.close(); } catch(Exception e) { e.printStackTrace(); } }//fim compactar() }//Compactador.class
Esta é a nossa classe Compactador, percebe-se que usaremos seu método compactar() para compactar todos os arquivos da pasta onde nossa classe está. Para usar o método é necessário instanciar um objeto da classe, por exemplo:
- Código:
[list=1][*]Compactador compactador = new Compactador();[*]compactador.compactar(...);[/list]Compactador compactador = new Compactador(); compactador.compactar(...);
O método recebe uma String como argumento com o nome do arquivo a ser criado. Ex.:"arquivo.zip".
1.1 Armazenadores
Vamos dar uma geral nas variáveis do método compactar.
- Código:
[list=1][*] int i, cont;[*] // Contadores.[*][*] byte[] dados = new byte[TAMANHO_BUFFER];[*] // Este array receberá os bytes lidos do arquivo a ser compactado.[*] // Veja que TAMANHO_BUFFER foi declarado como uma constante inteira de valor 2048, logo, o arquivo[*] // será lido de 2 em 2 KB. Você pode optar por ler blocos maiores ou menores, sem problema.[*][*] String arquivos[];[*] // Receberá a lista dos arquivos a serem compactados.[*][*] File f = null;[*] // f nos dará informações sobre a pasta (entrada) em que se encontra a classe.[*][*] BufferedInputStream origem = null;[*] FileInputStream streamDeEntrada = null;[*] FileOutputStream destino = null;[*][*] // Streams de entrada e saída. (Vide documentação do pacote java.io)[*][*] ZipOutputStream saida = null;[*] // saida será usada para gravar nossos dados de forma comprimida.[*][*] ZipEntry entry = null;[*] // Cada entrada do nosso arquivo ZIP[/list] int i, cont; // Contadores. byte[] dados = new byte[TAMANHO_BUFFER]; // Este array receberá os bytes lidos do arquivo a ser compactado. // Veja que TAMANHO_BUFFER foi declarado como uma constante inteira de valor 2048, logo, o arquivo // será lido de 2 em 2 KB. Você pode optar por ler blocos maiores ou menores, sem problema. String arquivos[]; // Receberá a lista dos arquivos a serem compactados. File f = null; // f nos dará informações sobre a pasta (entrada) em que se encontra a classe. BufferedInputStream origem = null; FileInputStream streamDeEntrada = null; FileOutputStream destino = null; // Streams de entrada e saída. (Vide documentação do pacote java.io) ZipOutputStream saida = null; // saida será usada para gravar nossos dados de forma comprimida. ZipEntry entry = null; // Cada entrada do nosso arquivo ZIP
1.2 Primeira parte importante
- Código:
[list=1][*][*][*] destino = new FileOutputStream(arqSaida);[*] saida = new ZipOutputStream(new BufferedOutputStream(destino));[*][*] f = new File(".");[*] arquivos = f.list();[/list] destino = new FileOutputStream(arqSaida); saida = new ZipOutputStream(new BufferedOutputStream(destino)); f = new File("."); arquivos = f.list();
1.3 Compactação
Para serem compactado, os arquivos têm que ser abertos, lidos e seus conteúdos escritos como entrada (entry) no arquivo ZIP. Isto é feito, arquivo por arquivo, percorrendo os elementos do array arquivos. É o que vemos no código abaixo.
- Código:
[list=1][*]for (i = 0; i < arquivos.length; i++) {[*] File arquivo = new File(arquivos[i]);[*][*] if (arquivo.isFile() && !(arquivo.getName()).equals(arqSaida)) {[*] System.out.println("Compactando:" + arquivos[i]);[*][*] streamDeEntrada = new FileInputStream(arquivo);[*] origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER);[*] entry = new ZipEntry(arquivos[i]);[*] saida.putNextEntry(entry);[*][*] while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {[*] saida.write(dados, 0, cont);[*] }[*][*] origem.close();[*] }[*]}[/list]for (i = 0; i < arquivos.length; i++) { File arquivo = new File(arquivos[i]); if (arquivo.isFile() && !(arquivo.getName()).equals(arqSaida)) { System.out.println("Compactando:" + arquivos[i]); streamDeEntrada = new FileInputStream(arquivo); origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER); entry = new ZipEntry(arquivos[i]); saida.putNextEntry(entry); while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) { saida.write(dados, 0, cont); } origem.close(); } }
O fragmento abaixo merece uma atenção especial.
- Código:
[list=1][*]entry = new ZipEntry(arquivos[i]);[*]saida.putNextEntry(entry);[/list]entry = new ZipEntry(arquivos[i]); saida.putNextEntry(entry);
É aqui que dizemos para saida que estamos enviando um novo arquivo (entrada).
Depois de informamos isto, podemos gravar (de 2 em 2 KB, lembra?) os dados no arquivo ZIP.
- Código:
[list=1][*]while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {[*] saida.write(dados, 0, cont);[*]}[/list]while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) { saida.write(dados, 0, cont); }
O resto do código é bastante simples, vale lembrar que sempre após ler ou gravar um arquivo, o seu stream deve ser fechado (origem.close(), saida.close()).
Enfim, um código bem simples que pode ser muito bem explorado em aplicações diversas.
Freak- Membro
- Mensagens : 134
Agradecimentos : 7
Data de inscrição : 02/01/2011
Tópicos semelhantes
» [Tutorial]Montando um Servidor de Lineage II Interlude em java
» Arquivos da ATT semanal 05/01/11.
» Arquivos da ATT semanal 12/01/11.
» Arquivos da Atualização Semanal 19/01/11.
» Arquivos de Atualizaçao Semanal 29/12/10
» Arquivos da ATT semanal 05/01/11.
» Arquivos da ATT semanal 12/01/11.
» Arquivos da Atualização Semanal 19/01/11.
» Arquivos de Atualizaçao Semanal 29/12/10
CheatsNaNet :: Programação :: Java
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|