Criar pasta zipada

Boa tarde.

Estou com um problema:

Tenho essa classe que zipa arquivos e pastas:

[code]import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class CompactadorZip {

//Constantes
static final int TAMANHO_BUFFER = 4096; // 4kb

//método para compactar arquivo
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));
        File file = new File(arqEntrada);
        if(file.isDirectory()){
            for (File arquivos : file.listFiles()) {
                streamDeEntrada = new FileInputStream(arquivos);
                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);
            }
        }
                   
        origem.close();
        saida.close();
    } catch(IOException e) {
        throw new IOException(e.getMessage());
    }

}

}[/code]

E estou testando assim:

[code]package br.com.ultramax.gestao.instalacao.model;

import java.io.IOException;

public class teste {

   public static void main(String args[]){
       try {
           Compactador.compactarParaZip("c:\\Temp\\UltramaxGestao\\Sistemas\\SistProd\\UltraPDV.zip", "c:\\Temp\\UltramaxGestao\\Sistemas\\SistProd\\UltraPDV");
       } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
   }

}[/code]

Porem ele me lança uma exception:

java.io.FileNotFoundException: c:\Temp\UltramaxGestao\Sistemas\SistProd\UltraPDV\DAO (Acesso negado) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(Unknown Source) at br.com.ultramax.gestao.instalacao.model.Compactador.compactarParaZip(Compactador.java:35) at br.com.ultramax.gestao.instalacao.model.teste.main(teste.java:9)

Verifiquei que isso ocorre pois ele não está zipando essa pasta DAO, que existe dentro da pasta UltraPDV.

Como eu poderia zipar as subpastas?

tenta algo assim:

[code]
public class Compactador {
private ZipOutputStream zos = null;
public void zip(File file) {
try {
FileOutputStream fos = new FileOutputStream(new File(“c:/temp/meuZip.zip”));
zos = new ZipOutputStream(fos);
addFile(file);
zos.flush();
zos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public void addFile(File file) throws IOException{
	if(file.isDirectory()){
		for(File dir : file.listFiles()){
			addFile(dir);
		}
	} else {
		zos.putNextEntry(new ZipEntry(file.getAbsolutePath()));
	}
}
public static void main(String[] args) {
	Compactador c = new Compactador();
	c.zip(new File("c:/teste"));
}

}[/code]

Acredito que pode ser problema de falta de privilégios, você está executando como administrador?

Caso não, faça um teste.

[]'s

Refiz a classe e agora está funcional:

[code]package br.com.ultramax.gestao.instalacao.model;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Compactador {
private ZipOutputStream zos = null;

public void zip(File origem, File destinoZIP) throws IOException {

	zos = new ZipOutputStream(new FileOutputStream(destinoZIP));
	addFile(origem, zos, origem);
	zos.flush();
	zos.close();
}

public void addFile(File arquivo, ZipOutputStream zos, File pastaPrincipal)
		throws IOException {

	if (arquivo.isDirectory()) {

		for (File a : arquivo.listFiles()) {
			addFile(a, zos, pastaPrincipal);
		}

	} else {

		final int TAMANHO_BUFFER = 4096; // 4kb
		int cont;
		byte[] dados = new byte[TAMANHO_BUFFER];

		BufferedInputStream origem = null;
		try {
			origem = new BufferedInputStream(new FileInputStream(arquivo),
					TAMANHO_BUFFER);

			String nomeEntrada = arquivo.getAbsolutePath();

			System.out.println(nomeEntrada);

			if (pastaPrincipal.isDirectory()) {
				nomeEntrada = nomeEntrada.substring(pastaPrincipal
						.getAbsolutePath().length() + 1);
			} else {
				nomeEntrada = arquivo.getName();
			}

			zos.putNextEntry(new ZipEntry(nomeEntrada));

			while ((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {

				zos.write(dados, 0, cont);
			}

		} finally {
			if (origem != null) {
				origem.close();
			}
		}
	}
}

public static void main(String[] args) throws IOException {
	Compactador c = new Compactador();
	c.zip(new File("c:/temp/teste"), new File("c:/temp/meuzip.zip"));
}

}[/code]