package gcom.util;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* Esta classe re�ne fun��es que manipulam um arquivo zip no sistema
*
* @author Rodrigo Silveira
* @date 19/05/2006
*/
public class ZipUtil {
/**
* Adiciona o arquivo especificado ao zipOutputStream que representa o
* arquivo zip
*
* @author Rodrigo Silveira
* @date 19/05/2006
*
* @param zipFile
* Stream que representa o arquivo zip
* @param file
* Arquivo a ser adicionado no arquivo zip
* @throws IOException
*/
public static void adicionarArquivo(ZipOutputStream zipFile, File file)
throws IOException {
FileInputStream inputStream = new FileInputStream(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int INPUT_BUFFER_SIZE = 1024;
byte[] temp = new byte[INPUT_BUFFER_SIZE];
int numBytesRead = 0;
while ((numBytesRead = inputStream.read(temp, 0, INPUT_BUFFER_SIZE)) != -1) {
baos.write(temp, 0, numBytesRead);
}
inputStream.close();
inputStream = null;
byte[] data = baos.toByteArray();
ZipEntry zen = new ZipEntry(file.getName());
zipFile.putNextEntry(zen);
zipFile.write(data, 0, data.length);
zipFile.closeEntry();
}
/**
* Adiciona um diret�rio a um arquivo zip especificado
*
* @author Rodrigo Silveira
* @date 19/05/2006
*
* @param dir2zip
* Diret�rio que ser� adicionado ao arquivo zip
* @param zos
* Stream que representa o arquivo zip
* @throws IOException
*/
public static void adicionarPasta(File dir2zip, ZipOutputStream zos)
throws IOException {
String[] dirList = dir2zip.list();
byte[] readBuffer = new byte[2156];
int bytesIn = 0;
for (int i = 0; i < dirList.length; i++) {
File f = new File(dir2zip, dirList[i]);
if (f.isDirectory()) {
adicionarPasta(f, zos);
continue;
}
FileInputStream fis = new FileInputStream(f);
ZipEntry anEntry = new ZipEntry(f.getPath());
zos.putNextEntry(anEntry);
while ((bytesIn = fis.read(readBuffer)) != -1) {
zos.write(readBuffer, 0, bytesIn);
}
fis.close();
}
}
/*
Adiciona o arquivo especificado ao zipOutputStream que representa o
* arquivo zip
*
* @author Rodrigo Silveira
* @date 19/05/2006
*
* @param zipFile
* Stream que representa o arquivo zip
* @param file
* Arquivo a ser adicionado no arquivo zip
* @throws IOException
*/
public static void adicionarArquivo(GZIPOutputStream zipFile, File file)
throws IOException {
FileInputStream inputStream = new FileInputStream(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int INPUT_BUFFER_SIZE = 1024;
byte[] temp = new byte[INPUT_BUFFER_SIZE];
int numBytesRead = 0;
while ((numBytesRead = inputStream.read(temp, 0, INPUT_BUFFER_SIZE)) != -1) {
baos.write(temp, 0, numBytesRead);
}
inputStream.close();
inputStream = null;
byte[] data = baos.toByteArray();
// ZipEntry zen = new ZipEntry(file.getName());
// zipFile.putNextEntry(zen);
zipFile.write(data, 0, data.length);
zipFile.close();
// zipFile.closeEntry();
}
/*
* @TODO - COSANPA
*
* M�todo para descomprimir um arquivo com extens�o Gzip (.gz)
*
* @author Felipe Santos
*
* @date 26/05/2011
*
* @param arquivoGz
*/
public static File descomprimirGzip(File arquivoGz) {
File file = null;
try {
String arquivoEntradaNome = arquivoGz.getAbsolutePath();
// Abre o arquivo comprimido
GZIPInputStream in = new GZIPInputStream(new FileInputStream(
arquivoEntradaNome));
// Abre o arquivo de sa�da
String arquivoSaidaNome = arquivoEntradaNome.replace(".gz", "").trim();
OutputStream out = new FileOutputStream(arquivoSaidaNome);
// Transfere os bytes do arquivo comprimido para o arquivo de sa�da
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
file = new File(arquivoSaidaNome);
// Fecha os arquivos
in.close();
out.close();
//Deleta o arquivo antigo
arquivoGz.delete();
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
/*
* @TODO - COSANPA
*
* M�todo para comprimir um arquivo com extens�o Gzip (.gz)
*
* @author Felipe Santos
*
* @date 26/05/2011
*
* @param arquivoGz
*/
public static File comprimirGzip(File arquivoOriginal) throws IOException {
String comprimidoTipo = arquivoOriginal.getAbsolutePath()+".gz";
File comprimido = new File(comprimidoTipo);
InputStream is = new FileInputStream(arquivoOriginal);
GZIPOutputStream gzos = new GZIPOutputStream(new FileOutputStream(
comprimido));
byte[] buffer = new byte[16 * 1024];
for (int nBytesLidos = is.read(buffer); nBytesLidos > 0; nBytesLidos = is
.read(buffer)) {
gzos.write(buffer, 0, nBytesLidos);
}
is.close();
gzos.close();
return comprimido;
}
}