Executar um .bat (comandos do DOS) no Windows XP a partir de uma classe em Java

Olá, galera estou precisando executar um .bat (comandos do DOS) no Windows XP a partir de uma classe em Java
e já tentei todos os códigos abaixo, mas não conseguí executar o file.bat que está no c:.

[code]import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ExecutaBat {

/* public static void main(String[] args) {
Runtime run = Runtime.getRuntime();
try {
run.exec(“c:\file.bat”);
} catch (Exception e) {
e.printStackTrace();
}
}
*/

/* public static void main(String[] args) {
try {
Process process = Runtime.getRuntime().exec(“c:\file.bat”);
} catch (IOException e) {
e.printStackTrace();
}
}*/

/* public static void main(String[] args) throws IOException {
Runtime.getRuntime().exec(“cmd /c c:\file.bat”);
}*/

/*public static void main(String[] args) {
	Runtime run = Runtime.getRuntime();
	try {
		run.exec("cmd start /c C:/file.bat");
	} catch (Exception e) {
		e.printStackTrace();
	}
	System.out.println("FINISHED");
}*/

/* public static void main(String[] argv) throws Exception {
Runtime.getRuntime().exec(“cmd /c c:\file.bat”);
Thread.sleep(2);
} */

/* public static void main(String[] args) {
Runtime runtime = Runtime.getRuntime();
String[] cmd = { “cmd”, “/c”, “c:\file.bat” };
try {
Process p = runtime.exec(cmd);
BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = b.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}*/

}[/code]

cara…esse aqui ta certo…era pra ter funcionado

   public static void main(String[] args) { 
         try { 
             Process process = Runtime.getRuntime().exec("c:\\file.bat"); 
         } catch (IOException e) { 
             e.printStackTrace(); 
         }  
    }  

O SpringBatch tbm fornece um recurso para esse tipo de processamento.

Já falei, no mínimo, umas 10 vezes aqui. Cuidado ao executar processos externos à máquina virtual. Você precisa, obrigatoriamente, consumir os streams de saída e de erro do processo para não “travar” o runtime nem a execução do processo externo. Leitura obrigatória: http://www.javaworld.com/jw-12-2000/jw-1229-traps.html
Se o seu bat jogar coisas para a saída padrão ou para o stream de erros, vc PRECISA consumir os streams.

Você não precisa usar “\”. Use a barra normal. A JVM vai fazer a troca p/ vc automaticamente. Na verdade, o Windows aceita “/”.

Um exemplo bobinho:

[code]Process p = Runtime.getRuntime().exec( “x.bat” );
InputStreamReader s = new InputStreamReader( p.getInputStream() );
InputStreamReader serr = new InputStreamReader( p.getErrorStream() );

int c;

// consome o stream de saída
while ( ( c = s.read() ) != -1 ) {
System.out.print( ( char ) c );
}

// consome o stream de erro
while ( ( c = serr.read() ) != -1 ) {
System.out.print( ( char ) c );
}[/code]

Não use meu exemplo. Crie a classe StreamGobbler sugerida no artigo que indiquei. Ao invés de estender Thread, implemente Runtime.
Aqui tem uma das discussões sobre isso: http://www.guj.com.br/java/213361-processbuilder

[]'s