Olá,
gostaria de ajuda para conseguir zipar uma pasta qualquer. O método abaixo consegue apenas zipar arquivos individuais. Sei que devo
implementar recursivadade mas está meio complicado de fazer. Qualquer ajuda será bem vinda.
// if you don't need to specify a name
static void zip(File file, ZipOutputStream zos) throws IOException
{
zip(file, file.getName(), zos);
}
[code]// name is the name for the file
static void zip(File file, String name, ZipOutputStream zos) throws IOException
{
if (file.isDirectory())
{
File[] files = file.listFiles();
if (files != null) // always check, in case the folder can't be read
{
for (File f: files)
{
String childName = name + "/" + f.getName();
zip(f, childName, zos);
}
}
}
else
{
// zip the file using the given name
}
}[/code]
Saberia me dizer como passo o diretório destino para o objeto ZipOutputStream -> ZipOutputStream zos?
Ou poderia me ajudar neste método ele dá pau ler diretorio…
[code] //método para compactar arquivo e ou diretorio
public static void compactarParaZip(String arqSaida,String[] arqEntrada) throws IOException{
int cont;
byte[] dados = new byte[TAMANHO_BUFFER];
BufferedInputStream origem = null;
FileInputStream streamDeEntrada = null;
FileOutputStream destino = null;
ZipOutputStream saida = null;
ZipEntry entry = null;
try {
destino = new FileOutputStream(new File(arqSaida));
saida = new ZipOutputStream(new BufferedOutputStream(destino));
for (int i = 0; i < arqEntrada.length; i++) {
File file = new File(arqEntrada[i]);
if(file.isDirectory()){
for (File arquivos : file.listFiles()) {
[b]streamDeEntrada = new FileInputStream(arquivos); // DA PAU!!!
[/b] origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER);
entry = new ZipEntry(arquivos.getName());
saida.putNextEntry(entry);
while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {
saida.write(dados, 0, cont);
}
}
}else{
streamDeEntrada = new FileInputStream(file);
origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER);
entry = new ZipEntry(file.getName());
saida.putNextEntry(entry);
while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {
saida.write(dados, 0, cont);
}
}
Melhor dizendo… Não dá pau não… Ele funciona quero dizer que faz o seguinte:
ex: vc tem uma pasta chamada pasta1 e dentro dela é um arquivo chamado arquivo1 e compacta junto com um arquivo chamado arquivo 2 -> ele compacta, só q quando vc descompacta aparece assim: arquivo1 e arquivo2 e não pasta1/arquivo1 e arquivo2.