Problemas em gerar dump mysql no java!

Oi galera! Tô com um problemao aki.
É o seguinte, to fazendo uma aplicaçao Desktop para um cliente e quero que seja possivel gerar um Backup do banco. ou seja um Dump! fiz minha classe aki, nao sei qual o problema mas ele simplesmente só gera o arquivo .sql e quando abro este arquivo esta em branco, nao tem nada!
aki vai a classe:
package Classes;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Beckup{

public static void Beckup(){
String path=“C:\Arquivos de Programas\data.sql”;
String dumpCommand = “cmd /c mysqldump -u root -p admin aluno > " + path;
File tst = new File(path);
FileWriter fw = null;
try{
fw = new FileWriter(tst);
fw.close();
}catch(IOException ex){
ex.printStackTrace();
}
Runtime rt = Runtime.getRuntime();
try {
Process proc = rt.exec(dumpCommand);
InputStream in = proc.getInputStream();
InputStreamReader read = new InputStreamReader(in,“latin1”);
BufferedReader br = new BufferedReader(read);
BufferedWriter bw = new BufferedWriter(new FileWriter(tst,true));
String line=null;
StringBuffer buffer = new StringBuffer();
while((line=br.readLine())!=null){
buffer.append(line+”\n");
}
String toWrite = buffer.toString();
bw.write(toWrite);
bw.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}

}
public static void main(String args[]){
    Beckup();
}

}
Agradeço!

[quote=qtgp2std]Oi galera! Tô com um problemao aki.
É o seguinte, to fazendo uma aplicaçao Desktop para um cliente e quero que seja possivel gerar um Backup do banco. ou seja um Dump! fiz minha classe aki, nao sei qual o problema mas ele simplesmente só gera o arquivo .sql e quando abro este arquivo esta em branco, nao tem nada!
aki vai a classe:
package Classes;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Beckup{

public static void Beckup(){
String path=“C:\Arquivos de Programas\data.sql”;
String dumpCommand = “cmd /c mysqldump -u root -p admin aluno > " + path;
File tst = new File(path);
FileWriter fw = null;
try{
fw = new FileWriter(tst);
fw.close();
}catch(IOException ex){
ex.printStackTrace();
}
Runtime rt = Runtime.getRuntime();
try {
Process proc = rt.exec(dumpCommand);
InputStream in = proc.getInputStream();
InputStreamReader read = new InputStreamReader(in,“latin1”);
BufferedReader br = new BufferedReader(read);
BufferedWriter bw = new BufferedWriter(new FileWriter(tst,true));
String line=null;
StringBuffer buffer = new StringBuffer();
while((line=br.readLine())!=null){
buffer.append(line+”\n");
}
String toWrite = buffer.toString();
bw.write(toWrite);
bw.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}

}
public static void main(String args[]){
    Beckup();
}

}
Agradeço![/quote]

primeiro utilize as tag code para colocar os códigos, fica mais legivel…

eu tive muitos problemas em usar chamadas de comandos externos que tenham parametro “>” e outros caracteres especiais. O java simplesmente se perde e não executa nada. Então vc tem que escerver em um arquivo (.bat ou .cmd) e executar por este arquivo.

Tem alguma dica para escrever arquivos .bat ou cmd pro meu problema?

aqui mesmo tem tutoriais para escrita de arquivo.

http://www.guj.com.br/article.show.logic?id=13

se for linux, cuidado com a permissão de para a execução de arquivo… (tem que dar um chmod +x antes)

A senha (parâmetro -p) deve vir junto ao parâmetro: mysqldump -u root -padmin aluno
mysqldump é um programa, não um comando do shell do windows, sendo assim, não precisa invocar o cmd.

[]´s

Com motivo diria. Nesse caso, ao invés de executar o comando com um redirecionador de saída, o correto é executar o programa, ler a saída do processo via Java (usando Process.getInputStream() e Scanner, por exemplo) e salvar os dados lidos no arquivo de destino. Opcionalmente, pode-se criar um script de lotes (.bat ou .sh) mas o maior problema aqui é a portabilidade do código.

Com motivo diria. Nesse caso, ao invés de executar o comando com um redirecionador de saída, o correto é executar o programa, ler a saída do processo via Java (usando Process.getInputStream() e Scanner, por exemplo) e salvar os dados lidos no arquivo de destino. Opcionalmente, pode-se criar um script de lotes (.bat ou .sh) mas o maior problema aqui é a portabilidade do código.[/quote]

os problemas que eu tive, não necessariamente o programa externo gerava saida, e sim era um parametro para o processamento dele mesmo… entao optei em fazer um arquivo .bat que serve para ambos os SO que eu queria, e executar por ele… No meu caso além de nção executar o comando com sucesso, o java criava umas pastas nada a ver com a vida com pedaços dos nomes do meu parametro…