control consola configurar abrir java command terminal launch

consola - ¿Cómo abrir el símbolo del sistema e insertar comandos usando Java?



configurar java en windows 7 (7)

Lo siguiente me funciona en Snow Leopard:

Runtime rt = Runtime.getRuntime(); String[] testArgs = {"touch", "TEST"}; rt.exec(testArgs);

La cosa es que, si quiere leer el resultado de ese comando, necesita leer el flujo de entrada del proceso. Por ejemplo,

Process pr = rt.exec(arguments); BufferedReader r = new BufferedReader(new InputStreamReader(pr.getInputStream()));

Le permite leer la salida línea por línea del comando con bastante facilidad.

El problema también podría ser que MS-DOS no interpreta su orden de argumentos para significar "iniciar un nuevo símbolo del sistema". Su matriz probablemente debería ser:

{"inicio", "cmd.exe", "/ c"}

Para abrir comandos en el nuevo símbolo del sistema, debe usar la referencia de proceso. Pero no estoy seguro de por qué querría hacer eso cuando puede simplemente usar el ejecutivo, como comentó la persona que me precedió.

¿Es posible abrir el símbolo del sistema (y supongo que cualquier otro terminal para otros sistemas) y ejecutar comandos en la ventana recién abierta?

Actualmente lo que tengo es esto:

Runtime rt = Runtime.getRuntime(); rt.exec(new String[]{"cmd.exe","/c","start"});

He intentado agregar el siguiente comando después del "inicio", he intentado ejecutar otro rt.exec que contiene mi comando, pero no puedo encontrar la manera de hacerlo funcionar.

Si es importante, intento ejecutar un comando similar a este:

java -flag -flag -cp terminal-based-program.jar

EDITAR Desafortunadamente, he tenido algunos hallazgos extraños. Pude lanzar con éxito el símbolo del sistema y pasar un comando usando esto:

rt.exec("cmd.exe /c start command");

Sin embargo, solo parece funcionar con un comando. Porque, si trato de usar el separador de comandos como este, "cmd.exe / c start command & command2", el segundo comando se pasa a través del fondo (de la misma manera que si usara rt.exec ("command2");) . Ahora el problema aquí es que me di cuenta de que necesito cambiar el directorio en el que se ejecuta el símbolo del sistema, porque si solo uso la ruta completa al archivo jar, el archivo jar lee incorrectamente los datos del directorio activo del símbolo del sistema, no el directorio del jar que contiene sus recursos.


Por favor, coloque su comando en un parámetro como el mencionado a continuación.

Runtime.getRuntime().exec("cmd.exe /c start cmd /k /" parameter /"");


Puede usar cualquiera en el proceso para la ruta dinámica en el símbolo del sistema

Process p = Runtime.getRuntime().exec("cmd.exe /c start dir "); Process p = Runtime.getRuntime().exec("cmd.exe /c start cd /"E://rakhee//Obligation Extractions/" && dir"); Process p = Runtime.getRuntime().exec("cmd.exe /c start cd /"E://oxyzen-workspace//BrightleafDesktop//Obligation Extractions/" && dir");


Sé que la gente recomienda mantenerse alejado de rt.exec (String), pero esto funciona, y no sé cómo cambiarlo a la versión de matriz.

rt.exec("cmd.exe /c cd /""+new_dir+"/" & start cmd.exe /k /"java -flag -flag -cp terminal-based-program.jar/"");


Si ejecuta dos comandos a la vez para cambiar el directorio en el que se ejecuta el símbolo del sistema, hay una sobrecarga para el método Runtime.exec que le permite especificar el directorio de trabajo actual. Me gusta,

Runtime rt = Runtime.getRuntime(); rt.exec("cmd.exe /c start command", null, new File(newDir));

Esto abrirá el símbolo del sistema en el directorio en newDir. Creo que tu solución también funciona, pero esto mantiene tu cadena de comandos o matriz un poco más limpia.

Hay una sobrecarga por tener el comando como una cadena y tener el comando como una matriz de Cadenas.

Sin embargo, le resultará aún más fácil usar ProcessBuilder , que tiene un método de directory para establecer su directorio de trabajo actual.

Espero que esto ayude.


Solo necesita agregar su comando después del inicio en la cadena que está pasando.

String command = "cmd.exe /c start "+"*your command*"; Process child = Runtime.getRuntime().exec(command);


public static void main(String[] args) { String[] arg = new String[]{"-u root", "-h localhost"}; try { String ss = null; Runtime obj = null; Process p = Runtime.getRuntime().exec("cmd.exe /c start dir "); BufferedWriter writeer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream())); writeer.write("dir"); writeer.flush(); BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); System.out.println("Here is the standard output of the command:/n"); while ((ss = stdInput.readLine()) != null) { System.out.println(ss); } System.out.println("Here is the standard error of the command (if any):/n"); while ((ss = stdError.readLine()) != null) { System.out.println(ss); } } catch (IOException e) { System.out.println("FROM CATCH" + e.toString()); } }