Como percorrer o conteúdo de uma pasta pegando os arquivos para zipá-los?!

Bom dia à todos,

se alguém puder me ajudar a resolver esse problema eu serei muito grato, é o seguinte, preciso localizar uma pasta que contém alguns arquivos, preciso selecioná-los e zipá-los, como posso fazer isso. Se possível me passem algum código de exemplo que faça algo parecido.

Muito obrigado à todos pela atenção.

Fico no aguardo.

Abração

Fera.

Opa!

Cara, declara um vetor de arquivos!

Assim: Voc^e vai ter um objeto do tipo File que vai representar sua pasta:

File pasta = new File("caminho para a pasta");

Agora você usa um vetor de arquivos para pegar todo o conteúdo desta pasta

File[] arquivos = pasta.listFiles();

Agora com um laço for você passa por cada arquivo e faz o que for preciso com cada um deles

for(int i = 0; i < arquivos.length; i++) {
   ...código...
}

Espero ter ajudado!

Um abraço!

Tem uns bugs na hora de descompactar… mas eu acho que já te ajuda!!!

[]'s,

[code]package com.mti.backupFacil;

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.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

import org.apache.commons.logging.Log;

/**

*/

public abstract class BaseBackup {

/**
 * Log de realização de backup
 */
private Log log = null;

/**
 * Construtor padrão.
 */
public BaseBackup() {
}

/**
 * Construtor com objeto para efetivação de logs.
 * 
 * @param pLog
 */
public BaseBackup(Log pLog) {
	log = pLog;
}

/**
 * Cria uma estrutura de diretórios.
 * 
 * @param caminho
 *            Estrutura a ser criada
 * @throws BackupFacilException
 *             Exceção lançada caso ocorra falha na criação dos diretórios
 */
protected void criarPastas(String caminho) throws BackupFacilException {
	debug("Inicio - criarPastas(" + caminho + ")");
	File pasta = new File(caminho);
	if (!pasta.exists()) {
		boolean success = (new File(caminho)).mkdir();
		if (!success) {
			success = (new File(caminho)).mkdirs();
		}
		if (!success) {
			error("criarPastas(" + caminho + ")");
			throw new BackupFacilException("Erro na criação do diretório ["
					+ caminho + "]");
		}
	}
	debug("Fim - criarPastas(" + caminho + ")");
}

/**
 * Cria uma pasta.
 * 
 * @param caminhoPasta
 *            Pasta a ser criada
 * @throws BackupFacilException
 *             Exceção lançada caso ocorra falha na criação da pasta
 */
protected void criarPasta(String caminhoPasta) throws BackupFacilException {
	debug("Inicio - criarPasta(" + caminhoPasta + ")");
	if (!(new File(caminhoPasta)).exists()) {
		boolean success = (new File(caminhoPasta)).mkdir();
		if (!success) {
			error("criarPasta(" + caminhoPasta + ")");
			throw new BackupFacilException("Erro na criação do diretório ["
					+ caminhoPasta + "]");
		}
	}
	debug("Fim - (" + caminhoPasta + ")");
}

/**
 * Move uma pasta.
 * 
 * @param caminhoPasta
 *            Caminho da pasta que será movida
 * @param caminhoDestino
 *            Caminho da pasta de destino
 * @throws BackupFacilException
 *             Exceção lançada caso ocorra falha na operação
 */
protected void moverPasta(String caminhoPasta, String caminhoDestino)
		throws BackupFacilException {

	debug("Inicio - moverPasta(" + caminhoPasta + ", " + caminhoDestino
			+ ")");

	File src = new File(caminhoPasta);
	File dst = new File(caminhoDestino);

	boolean success = src.renameTo(new File(dst, src.getName()));
	if (!success) {
		error("moverPasta(" + caminhoPasta + ", " + caminhoDestino + ")");
		throw new BackupFacilException("Erro na copia de [" + caminhoPasta
				+ "] para [" + caminhoDestino + "]");
	}

	debug("Fim - moverPasta(" + caminhoPasta + ", " + caminhoDestino + ")");
}

/**
 * Copia um arquivo.
 * 
 * @param caminhoArquivo
 *            Camnhio do arquivo a ser copiado
 * @param destino
 *            Camniho do arquivo de destino
 * @throws BackupFacilException
 *             Exceção lançada caso ocorra falha na cópia do arquivo.
 */
protected void copiarArquivo(String caminhoArquivo, String caminhoDestino)
		throws BackupFacilException {

	debug("Inicio - copiarArquivo(" + caminhoArquivo + ", "
			+ caminhoDestino + ")");

	File src = new File(caminhoArquivo);
	File dst = new File(caminhoDestino);

	InputStream in;
	OutputStream out;
	try {
		in = new FileInputStream(src);
		if (dst.isDirectory()) {
			out = new FileOutputStream(dst + "/" + src.getName());
		} else {
			out = new FileOutputStream(dst);
		}
		// Transfer bytes from in to out
		byte[] buf = new byte[1024];
		int len;
		while ((len = in.read(buf)) > 0) {
			out.write(buf, 0, len);
		}
		in.close();
		out.close();
	} catch (FileNotFoundException e) {
		error("copiarArquivo(" + caminhoArquivo + ", " + caminhoDestino
				+ ")");
		throw new BackupFacilException("Erro na copia de ["
				+ caminhoArquivo + "] para [" + caminhoDestino + "]", e);
	} catch (IOException e) {
		error("copiarArquivo(" + caminhoArquivo + ", " + caminhoDestino
				+ ")");
		throw new BackupFacilException("Erro na copia de ["
				+ caminhoArquivo + "] para [" + caminhoDestino + "]", e);
	}
	debug("Fim - copiarArquivo(" + caminhoArquivo + ", " + caminhoDestino
			+ ")");
}

/**
 * Apaga uma pasta.
 * 
 * @param caminhoPasta
 *            Caminho da pasta que será apagada
 * @return true caso pasta apagada com sucesso
 * @throws BackupFacilException
 *             Exceção lançada caso ocorra falha na operação.
 */
protected boolean apagarPasta(String caminhoPasta)
		throws BackupFacilException {

	debug("Inicio - apagarPasta(" + caminhoPasta + ")");

	File dir = new File(caminhoPasta);
	if (dir.isDirectory()) {
		String[] children = dir.list();
		for (int i = 0; i < children.length; i++) {
			boolean success = apagarPasta(children[i]);
			if (!success) {
				error("apagarPasta(" + caminhoPasta + ")");
				throw new BackupFacilException("Erro ao apagar a pasta ["
						+ caminhoPasta + "]");
			}
		}
	}
	debug("Fim - apagarPasta(" + caminhoPasta + ")");
	return dir.delete();
}

/**
 * Apaga um arquivo.
 * 
 * @param caminhoArquivo
 *            Caminho do Arquivo a ser apagado
 * @throws BackupFacilException
 *             Exceção lançada caso ocorra falha na cópia do arquivo.
 */
protected void apagarArquivo(String caminhoArquivo)
		throws BackupFacilException {

	debug("Inicio - apagarArquivo(" + caminhoArquivo + ")");

	boolean success = (new File(caminhoArquivo)).delete();
	if (!success) {
		error("apagarArquivo(" + caminhoArquivo + ")");
		throw new BackupFacilException("Erro ao apagar o arquivo ["
				+ caminhoArquivo + "]");
	}
	debug("Fim - apagarArquivo(" + caminhoArquivo + ")");
}

/**
 * Compacta uma pasta ou arquivo para um arquivo .ZIP.
 * 
 * @param caminhoFonte
 *            Caminho da pasta ou arquivo que será compactado
 * @param caminhoArquivoZip
 *            Caminho do Arquivo zip de destino
 * @throws BackupFacilException
 *             Exceção lançada caso ocorra falha na compactação do arquivo
 *             ou pasta.
 */
protected void compactarPastaToZip(String caminhoFonte,
		String caminhoArquivoZip) throws BackupFacilException {

	debug("Inicio - compactarPastaToZip(" + caminhoFonte + ", "
			+ caminhoArquivoZip + ")");

	File[] filenames = new File(caminhoFonte).listFiles();

	byte[] buf = new byte[1024];

	try {
		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
				caminhoArquivoZip));

		// Compress the files
		for (int i = 0; i < filenames.length; i++) {
			FileInputStream in = new FileInputStream(filenames[i]
					.getAbsolutePath());

			// Add ZIP entry to output stream.
			out.putNextEntry(new ZipEntry(filenames[i].getName()));

			// Transfer bytes from the file to the ZIP file
			int len;
			while ((len = in.read(buf)) > 0) {
				out.write(buf, 0, len);
			}

			// Complete the entry
			out.closeEntry();
			in.close();
		}
		out.close();
	} catch (IOException e) {
		error("compactarPastaToZip(" + caminhoFonte + ", "
				+ caminhoArquivoZip + ")");
		throw new BackupFacilException("Erro ao compactar [" + caminhoFonte
				+ "] para [" + caminhoArquivoZip + "]", e);
	}
	debug("Fim - compactarPastaToZip(" + caminhoFonte + ", "
			+ caminhoArquivoZip + ")");
}

private void copyInputStream(InputStream in, OutputStream out)
		throws IOException {
	byte[] buffer = new byte[1024];
	int len;
	while ((len = in.read(buffer)) >= 0){
		out.write(buffer, 0, len);
	}

	in.close();
	out.close();
}

/**
 * Descompacta um arquvo zip
 * 
 * @param caminhoFonte
 *            Arquivo que será descompactado
 * @throws BackupFacilException
 *             Exceção lançada caso ocorra falha na operação.
 */
protected void descompactarZip(String caminhoFonte, String destino)
		throws BackupFacilException {

	debug("Inicio - descompactarZip(" + caminhoFonte + ", " + destino + ")");

	if("".equals(destino)){
		destino = (new File(caminhoFonte)).getParentFile().getAbsolutePath() + "/";
	}

	Enumeration entries;
	ZipFile zipFile;

	try {
		zipFile = new ZipFile(caminhoFonte);
		entries = zipFile.entries();

		while (entries.hasMoreElements()) {
			ZipEntry entry = (ZipEntry) entries.nextElement();
			if (entry.isDirectory()) {
				(new File(entry.getName())).mkdir();
				continue;
			}
			copyInputStream(zipFile.getInputStream(entry),
					new BufferedOutputStream(new FileOutputStream(destino + entry
							.getName())));
		}
		zipFile.close();
	} catch (IOException e) {
		error("descompactarZip(" + caminhoFonte + ")");
		throw new BackupFacilException("Erro ao descompactar o arquivo ["
				+ caminhoFonte + "]", e);
	}
	debug("Fim - descompactarZip(" + caminhoFonte + ")");
}

/**
 * Move um arquivo.
 * 
 * @param caminhoArquivo
 *            Caminho do arquivo que será movido
 * @param caminhoDestino
 *            Caminho de destino
 * @throws BackupFacilException
 *             Exceção lançada caso ocorra falha na operação
 */
protected void moverArquivo(String caminhoArquivo, String caminhoDestino)
		throws BackupFacilException {
	copiarArquivo(caminhoArquivo, caminhoDestino);
	apagarArquivo(caminhoArquivo);
}

/**
 * Grava log de debug.
 * 
 * @param obj
 *            Mensagem a ser gravada
 */
private void debug(Object obj) {
	if (log != null) {
		log.debug(obj);
	}
}

/**
 * Grava log de erro.
 * 
 * @param obj
 *            Mensagem a ser gravada
 */
private void error(Object obj) {
	if (log != null) {
		log.error(obj);
	}
}

}[/code]

Eu não sei aonde encontrar essa API de log:

org.apache.commons.logging.Log

O que ela faz exatamente?? poderia me ajudar?
obrigadão

que feio, fazendo o dever de casa do cara …
vcs tinham que tomar vergonha na cara …
e ele tinha que lembrar que se o professor passou este exercicio, ele devia pelo menos tentar fazer …

[code]
public class BackupFacilException extends Exception {

private String message;

BackupFacilException (String message)
{
	this.message = message;
}

BackupFacilException (String message,IOException e)
{
	this.message = message + e;
}


public String getMessage()
{
	return message;
}

}[/code]

Bom gente criei a classe da Exception…o que vocês acharam?? é assim
mesmo que ela tem que ficar ou tá tosquinha?? :cry:
Ajudem esse Padawan JAVA…hihihihi
(mais uma perguntinha, você declarou a classe como abstract, como vou conseguir acessar ela, por que você declarou ela como abstract!! não entendi sabe?poderia explicar? e aquele construct com o Log como parametro…como trabalho com ele???)
:stuck_out_tongue:

A classe é abstract porque deverá ser herdada, eu criei como abstrata porque ela faz parte de um componente de backup e existem outras classes filhas(BackupMedia, BackupImage etc…), cada uma com suas devidas responsabilidades, e essa classe(BaseBackup), possui alguns métodos comuns, por isso eu criei assim! É claro que não é o melhor jeito de implementar, mas na época foi assim que eu pensei em fazer hehehe…

Quanto a classe de log, ela faz parte do jakarta-commons-logging (http://jakarta.apache.org/commons/logging/), quando passado uma referencia de um obj de log no construtor da classe de backup, o “componente” passa a utilizar esse log para gravar os logs do backup, caso não seja passado nehuma referencia, não é gravado nenhum log.

Espero ter ajudado,

[]'s

[quote=rodam]A classe é abstract porque deverá ser herdada, eu criei como abstrata porque ela faz parte de um componente de backup e existem outras classes filhas(BackupMedia, BackupImage etc…), cada uma com suas devidas responsabilidades, e essa classe(BaseBackup), possui alguns métodos comuns, por isso eu criei assim! É claro que não é o melhor jeito de implementar, mas na época foi assim que eu pensei em fazer hehehe…

Quanto a classe de log, ela faz parte do jakarta-commons-logging (http://jakarta.apache.org/commons/logging/), quando passado uma referencia de um obj de log no construtor da classe de backup, o “componente” passa a utilizar esse log para gravar os logs do backup, caso não seja passado nehuma referencia, não é gravado nenhum log.

Espero ter ajudado,

[]'s[/quote]

Como eu poderia passar a referência desse log para o construto??Não entendi…por que não posso criar uma instancia de objeto log…achei estranho…como eu faria para passar a referência de um objeto log?
ps: A classe que zipa não está funcionando aqui…não sei o que está acontecendo…aparece um erro de Acess Denied, bem estranho!!!To passando os parametros corretamente: “E:\nome da pasta de origem”, E:\nome da pasta de destino"
o que serás que acontece?
:shock:

Caro amigo Urubatan, desculpe se com a minha simples pergunta ofendi uma classe que deve ser eternamente respeitada, admirada e valorizada que é a classe dos educadores. É uma pena que essa classe de pedagôgos especializada não seja tão valorizada quanto deveria, o investimento destinado à educação aumentou, porém, tão pouco que praticamente não foi notado, isso é realmente uma pena. No meu caso, estou procurando aprender sozinho a trabalhar com java, mas concordo que, se tivesse fazendo um curso com um instrutor meu aprendizado seria bem melhor e mais rápido, no entanto, devido à falta de dinheiro não posso fazê-lo, logo, tenho que estudar por conta própria. E sou muito grato aos inventores dos fóruns e grupos de estudo, pois, através destes veículos de informação, muitos podem ter acesso à dicas e exemplos que facilitam o entendimento de diversos assuntos. Eu já havia tentado fazer o código para zipar arquivos, porém, estava tendo dificuldades de acessar os arquivos a serem zipados. E após este post respondido pude corrigir a parte do meu código que estava errada e assim ele funcionou. Suponho que você tenha se ofendido com a pergunta por ser um detentor de conhecimento que faz desta fonte de informação uma forma de trabalho, lecionando aos menos instruídos, porém, como já expliquei, não tive a intenção de ofender. Peço lhe desculpas, pois, como você estava, também posso estar equivocado. Por isso, novamente peço lhe desculpas, pois não devemos levantar falsas suposições. Obrigado pela atenção de todos e pela ajuda que me deram.

Valeu Rodam e à todos os que fazem desse portal uma fonte de saber.

PS.: “Perguntar não ofende e respoder à perguntas não é vergonha alguma.”

Segue uma classe de exemplo:

[code]
package com.mti.backupFacil;

import java.io.IOException;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.PropertyConfigurator;

public class Teste2 {

private static Log log = LogFactory.getLog(Teste.class);

public static void main(String[] args) {
	
	Properties props = new Properties() ;
	try {
		//carrega arquivo de porperties do log
		props.load(Teste.class.getResourceAsStream("/conf/log4j.properties"));
	} catch (IOException e1) {
		e1.printStackTrace();
	} 

	PropertyConfigurator.configure(props);

	BackupMedia bkp = new BackupMedia(log);

	System.out.println("Begin..");
	
	try {
		bkp.compactarPastaToZip("c:\temp\musicas","c:\temp\bkmp3.zip");
	} catch (BackupFacilException e) {
		e.printStackTrace();
	}

	System.out.println("End!");
}

}[/code]

Te aconselho a dar uma olhada, em como se configura o arquivo de log.

Segue o conteudo do arquivo usado:

log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.file=c:/logTesteAAA.log
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

[]'s

[quote=FeraX6]Caro amigo Urubatan, desculpe se com a minha simples pergunta ofendi uma classe que deve ser eternamente respeitada, admirada e valorizada que é a classe dos educadores. É uma pena que essa classe de pedagôgos especializada não seja tão valorizada quanto deveria, o investimento destinado à educação aumentou, porém, tão pouco que praticamente não foi notado, isso é realmente uma pena. No meu caso, estou procurando aprender sozinho a trabalhar com java, mas concordo que, se tivesse fazendo um curso com um instrutor meu aprendizado seria bem melhor e mais rápido, no entanto, devido à falta de dinheiro não posso fazê-lo, logo, tenho que estudar por conta própria. E sou muito grato aos inventores dos fóruns e grupos de estudo, pois, através destes veículos de informação, muitos podem ter acesso à dicas e exemplos que facilitam o entendimento de diversos assuntos. Eu já havia tentado fazer o código para zipar arquivos, porém, estava tendo dificuldades de acessar os arquivos a serem zipados. E após este post respondido pude corrigir a parte do meu código que estava errada e assim ele funcionou. Suponho que você tenha se ofendido com a pergunta por ser um detentor de conhecimento que faz desta fonte de informação uma forma de trabalho, lecionando aos menos instruídos, porém, como já expliquei, não tive a intenção de ofender. Peço lhe desculpas, pois, como você estava, também posso estar equivocado. Por isso, novamente peço lhe desculpas, pois não devemos levantar falsas suposições. Obrigado pela atenção de todos e pela ajuda que me deram.

Valeu Rodam e à todos os que fazem desse portal uma fonte de saber.

PS.: “Perguntar não ofende e respoder à perguntas não é vergonha alguma.”[/quote]
não foi ofença,
foi maus …
é que esta epoca do ano, a maior partte das perguntas onde pedem o trabalho completo assim, em vez de perguntar apenas o ponto onde o cara se perdeu, são de alguem querendo ajuda pra fazer o dever de casa …

eu é que peço desculpas se este não era o caso …

PS.: eu também aprendi estudando por conta :smiley:

[quote=rodam]Segue uma classe de exemplo:

[code]
package com.mti.backupFacil;

import java.io.IOException;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.PropertyConfigurator;

public class Teste2 {

private static Log log = LogFactory.getLog(Teste.class);

public static void main(String[] args) {
	
	Properties props = new Properties() ;
	try {
		//carrega arquivo de porperties do log
		props.load(Teste.class.getResourceAsStream("/conf/log4j.properties"));
	} catch (IOException e1) {
		e1.printStackTrace();
	} 

	PropertyConfigurator.configure(props);

	BackupMedia bkp = new BackupMedia(log);

	System.out.println("Begin..");
	
	try {
		bkp.compactarPastaToZip("c:\temp\musicas","c:\temp\bkmp3.zip");
	} catch (BackupFacilException e) {
		e.printStackTrace();
	}

	System.out.println("End!");
}

}[/code]

Te aconselho a dar uma olhada, em como se configura o arquivo de log.

Segue o conteudo do arquivo usado:

log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.file=c:/logTesteAAA.log
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

[]'s[/quote]

Obrigado pelas explicações…mas eu não entendi aonde esse Log é criado…e não entendi o funcionamento…puxa…acho que eu to mal mesmo…será que você podia ser mais legal e explicar mais didáticamente???
import org.apache.log4j.PropertyConfigurator; preciso mesmo dessa API para rodar? posso tirar a config das propriedades ou não???eu tentei sem as propriedades para parece que não rolou nada de novo…não vi arquivos criados nem nada…
tá mal o negócio!! ahahahaha pode me ajudar?:smiley:
obrigado!

Fica frio Urubatan, você não tem que se desculpar, eu já imaginava que você não teve a intenção, obrigado pela atenção cara.

Pessoal o meu problema com o Zip foi solucionado, porém, quero dar um passo além e pedir mais uma vez a ajuda de vocês. Galera, estou com o seguinte problema, eu tenho um método que chama vários métodos e cada um desses métodos chamados fazem a montagem de documentos de diferentes tipos(extensões: doc, xml, txt e etc…). Eu gostaria de montar um arquivo zip, pegando esses diversos arquivos gerados em tempo de execução, ou seja, preciso que cada método gere cada documento de modo que eu possa pegá-los e manipulá-los com o zipInputStream, o zipOutputStream, o zipEntry e etc… Então eu gostaria de saber como e de que maneira fazer com que eu possa manipular esses diferentes documentos através de um único método que zipa arquivos?! Ouvi dizer q poderia transformar essas informações em toByteArray, será que posso?! Se posso, como fazê-los?!

Desde já agradeço a atenção de todos e aguardo respostas.

Valeu!!!

Abração.

Fera.

olá

bom, se entendi direito, você quer zipar arquivos de diferentes extensões correto?

bom, se for esse o caso, esses dias mesmo fiz um programinha pra fazer isso…

				// cria novo zip
				zipFile.createNewFile();
				ZipOutputStream stream = new ZipOutputStream(new FileOutputStream(zipFile));
				// máxima compactação
				stream.setLevel(9);
				for (Iterator iter = arquivos.iterator(); iter.hasNext();) {
					String caminhoArquivo = ((String) iter.next()).trim();
					// retira a possível "/" do começo do arquivo
					while (caminhoArquivo.startsWith("/")) {
						caminhoArquivo = caminhoArquivo.substring(1);
					}
					in = new File(dirRaiz, caminhoArquivo);
					// se existir o arquivo
					if (in.exists()) {
						// abre stream do arquivo de origem
						fileInputStream = new FileInputStream(in);
	// cria nova entrada no zip
						stream.putNextEntry(new ZipEntry(caminhoArquivo));
						// grava os bytes no zip
						while ((bytes = fileInputStream.available()) > 0) {
							byte[] buffer = new byte[bytes];
							fileInputStream.read(buffer);
							stream.write(buffer);
						}
						// fecha a stream de origem e a entrada do zip
						fileInputStream.close();
						stream.closeEntry();
					} else {
						// o arquivo passado não foi encontrado pelo programa
					}
				}
				// fecha o zip
				stream.close();

alguns pontos que vou destacar…

arquivos é uma java.util.Collection que tem os arquivos que vou compactar.

dirRaiz é da classe java.io.File, que tem o diretório base que estou compactando, e caminhoArquivo é o caminho do arquivo em relação ao diretório. se vc mandar compactar por exemplo o diretório C:\dados e dentro tiver diretórios além dos arquivos, por exemplo, C:\dados\teste\arquivo.txt, no zip fica a informação do diretório também. nesse caso, caminhoArquivo = “teste\arquivo.txt”.

Faala cara, é mais ou menos isso, porém, eu tenho um método q retorna isso:

ByteArrayOutputStream a = new ByteArrayOutputStream(); marshaller.marshal(aExpRas, (Result) a); return;

Mas não funciona, na verdade o caminho do arquivo que desejo compactar teoricamente não existe, eu teria que pegar o conteúdo retornado por esse método, mas não fechar o zip, rodar outro método que vai me retornar outra coisa, adicionar no zip mas não fechá-lo, rodar outro método que vai me retornar outro documento diferente e adicionar ao zip, e daí então fechá-lo. É como se eu tivesse que processar tudo em memória. Será que minha explicação ficou clara?! Aguardo respostas!
Antes de qualquer modificação este código gera o arquivo.bla desta forma:

marshaller.marshal(aExpRas, (Result) new FileOutputStream(fileName) );

se souberem e puderem me ajudar eu agradeço.

Abração galera e obrigado pela força!!!

Valeu!!!

Fera.

bom, acho que entendi sim. e pelo que vi você passa um OutputStream para esse tal de marshaller né… tenta assim então:

// cria novo zip zipFile.createNewFile(); ZipOutputStream stream = new ZipOutputStream(new FileOutputStream(zipFile)); // máxima compactação stream.setLevel(9); // para cada arquivo que você vai colocar no zip, repita esta parte de baixo aqui, mudando o nome do arquivo // cria nova entrada no zip stream.putNextEntry(new ZipEntry("arquivo.bla")); marshaller.marshal(aExpRas, (Result) stream); stream.closeEntry();

flw, espero que tenha ajudado…