Ejecute comandos cmd a través de Java
Encontré varios fragmentos de código para ejecutar comandos cmd a través de una clase Java, pero no pude entenderlos.
Este es el código para abrir el cmd.
public void excCommand(String new_dir){
Runtime rt = Runtime.getRuntime();
try {
rt.exec(new String[]{"cmd.exe","/c","start"});
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Y encontré algunos otros enlaces para agregar otros comandos como cd http://www.coderanch.com/t/109753/Linux-UNIX/exec-command-cd-command-java
¿Cómo abrir el símbolo del sistema e insertar comandos usando Java?
¿Alguien puede ayudarme a entender cómo hacer CD en un directorio como:
cd C:\Program Files\Flowella
¿Luego ejecutar otros comandos en ese directorio?
Una forma de ejecutar un proceso desde un directorio diferente al directorio de trabajo de su programa Java es cambiar de directorio y luego ejecutar el proceso en la misma línea de comando. Puedes hacer esto ejecutando cmd.exe
una línea de comando como cd some_directory && some_program
.
El siguiente ejemplo cambia a un directorio diferente y se ejecuta dir
desde allí. Es cierto que podría utilizar dir
ese directorio sin necesidad de cd
hacerlo, pero esto es sólo un ejemplo:
import java.io.*;
public class CmdTest {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd \"C:\\Program Files\\Microsoft SQL Server\" && dir");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
}
}
Tenga en cuenta también que estoy usando a ProcessBuilder
para ejecutar el comando. Entre otras cosas, esto me permite redirigir el error estándar del proceso a su salida estándar, llamando a redirectErrorStream(true)
. Al hacerlo, solo me da una secuencia para leer.
Esto me da el siguiente resultado en mi máquina:
C:\Users\Luke\StackOverflow>java CmdTest
Volume in drive C is Windows7
Volume Serial Number is D8F0-C934
Directory of C:\Program Files\Microsoft SQL Server
29/07/2011 11:03 <DIR> .
29/07/2011 11:03 <DIR> ..
21/01/2011 20:37 <DIR> 100
21/01/2011 20:35 <DIR> 80
21/01/2011 20:35 <DIR> 90
21/01/2011 20:39 <DIR> MSSQL10_50.SQLEXPRESS
0 File(s) 0 bytes
6 Dir(s) 209,496,424,448 bytes free
Puedes probar esto: -
Process p = Runtime.getRuntime().exec(command);
Si desea realizar acciones como cd
, utilice:
String[] command = {command_to_be_executed, arg1, arg2};
ProcessBuilder builder = new ProcessBuilder(command);
builder = builder.directory(new File("directory_location"));
Ejemplo:
String[] command = {"ls", "-al"};
ProcessBuilder builder = new ProcessBuilder(command);
builder = builder.directory(new File("/ngs/app/abc"));
Process p = builder.start();
Es importante que divida el comando y todos los argumentos en cadenas separadas de la matriz de cadenas (de lo contrario, la ProcessBuilder
API no los proporcionará correctamente).