Então, o problema é o seguinte:
Preciso compactar(zip) no arquivo “athus_bkp.sql” depois que foi criado.
Este arquivo é um bkp do banco, e precisaria compacta-lo para naum ficar tão grande!
O código é este:
public class BackupDB {
public void realizarBackup() throws Exception{
Runtime r = Runtime.getRuntime();
try{
String diretorioPg = DiretorioPostgresUtil.getDiretorioPgDump();
String fileBackup = CaminhoUtils.CAMINHO_PASTA_ATHUS + "backup"
+ File.separatorChar + "athus_bkp.sql";
File file = new File(fileBackup);
if(!file.getParentFile().exists())
file.getParentFile().mkdirs();
diretorioPg = diretorioPg.concat(" -U postgres --file=\""+fileBackup+"\" athus");
System.out.println(diretorioPg);
Process p = r.exec(diretorioPg);
int i = p.waitFor();
if(i > 0){
InputStreamReader streamReader = new InputStreamReader(p.getErrorStream());
BufferedReader reader = new BufferedReader(streamReader);
String linha;
while((linha = reader.readLine()) != null){
System.err.println(linha);
}
}
System.out.println("Backup realizado com sucesso!");
}catch(IOException ex){
System.out.println("Erro ao tentar realizar o backup!"+ex.getMessage());
}
}
public static void main(String[] args) throws Exception{
BackupDB b = new BackupDB();
b.realizarBackup();
}
}
Antes de mais nada, está gerando exceção?
Se sim, poste o stacktrace.
Outro detalhe, ele está caindo dentro deste if?
if (arq.isFile() && !(arq.getName()).equals(arqSaida)) {
//seu código
}
Não esqueça de executar close nas classes, tem classe que não está executando o método close e isto pode estar sendo a causa da não-compactação do arquivo.
[quote=LipeJava]Esta ai é parte do compactar, o resto está acima!
[code]
public void compactar (String arqSaida) {
int cont;
byte[] dados = new byte[TAMANHO_BUFFER];
String arquivo = CaminhoUtils.CAMINHO_PASTA_ATHUS + “backup”
+ File.separatorChar + “athus_bkp.sql”;;
BufferedInputStream origem = null;
FileInputStream streamDeEntrada = null;
FileOutputStream destino = null;
ZipOutputStream saida = null;
ZipEntry entry = null;
try {
destino = new FileOutputStream(arqSaida);
saida = new ZipOutputStream(new BufferedOutputStream(destino));
File f = new File("."); // Todos os arquivos da pasta onde a classe está
File arq = new File(arquivo);
if (arq.isFile() && !(arq.getName()).equals(arqSaida)) {
System.out.println("Compactando: " + arquivo);
streamDeEntrada = new FileInputStream(arq);
origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER);
entry = new ZipEntry(arquivo);
saida.putNextEntry(entry);
while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {
saida.write(dados, 0, cont);
}
origem.close();
}
saida.close();
} catch(Exception e) {
e.printStackTrace();
System.out.println("Erro no compactar: "+e.getMessage());
}
System.out.println(arqSaida);
System.out.println("Compactado com sucesso!");
}
[/code][/quote]
Só olhando por cima, para mim parece que tá faltando chamar o método “closeEntry()” da classe ZipOutputStream no meio do percurso.
EDITADO: Ops, posso ter escrito algo irrelevante no caso de se usar arquivos zip com apenas um arquivo dentro. Ainda assim sugiro usar alguma solução como a que fiz ou a do usuário entanglement.
Na realidade, o caminho de saída ou de entrada podem estar incorretos.
Eu simplesmente copiei e colei o seu método aqui, executei os testes e ocorreu tudo bem, gerou o arquivo ZIP sem problemas.
De qualquer forma, execute os close, por garantia, já que eles podem estar atrelados a outro(s) processo(s).
E esta linha:
File f = new File("."); // Todos os arquivos da pasta onde a classe está
Bem, agora consegui fazer ele anexar!
Muito obrigado mesmo, mas tem um detalhe.
Ele me anexo todo o caminho (C://Arquivos de Programas/…/athus_bkp.sql)
Ai tenq ir abrindo as pastas até chegar no arquivo que quero. Mas está compactado!