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.
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 …
Bom gente criei a classe da Exception…o que vocês acharam?? é assim
mesmo que ela tem que ficar ou tá tosquinha??
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???)
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.
[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.”
[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 …
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?
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.
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) );
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();