2012-02-19 20 views
5

Tengo un pequeño problema con la ejecución de una herramienta de línea de comandos. Quiero ejecutar UnRAR.exe desde WinRAR. Lo hago así:Java ejecutar el programa de línea de comando

Process process = runtime.exec("\"" + unrarPath + "\"" + " x -kb -vp " + "\"" + fileName + "\"", null, f.getParentFile()); 

Mi problema es que el archivo comprimido está protegido por contraseña. Si ejecuto el comando en mi consola, me piden una contraseña. Si dejo que Java lo ejecute, el programa simplemente termina y nunca espera la entrada de un usuario (la contraseña).

Intenté escribir en la salida del proceso pero eso no funcionó. ¿Hay algo que necesite saber sobre el comportamiento de los programas de línea de comandos ejecutados en entornos "diferentes"?

EDITAR: Quizás no fui lo suficientemente claro. Mi pregunta es: ¿Es posible interactuar con un programa de línea de comando con Java?

+0

que añade nueva respuesta y eliminan de edad. Espero que la nueva respuesta te satisfaga. – Kamil

Respuesta

10

Funciona para mí. ¿Quizás no escribiste una línea nueva y borraste la transmisión?

Process tr = Runtime.getRuntime().exec(new String[]{ "cat" }); 
Writer wr = new OutputStreamWriter(tr.getOutputStream()); 
BufferedReader rd = new BufferedReader(new InputStreamReader(tr.getInputStream())); 
wr.write("hello, world\n"); 
wr.flush(); 
String s = rd.readLine(); 
System.out.println(s); 

http://ideone.com/OUGYv

+1 a su pregunta, java.lang.Process era lo que estaba buscando!

0

Existen pocos métodos para ejecutar el proceso e interactuar con él.

Hay Process clase en java. Permite obtener las 3 secuencias de subproceso (proceso llamado por tu aplicación java).

clase de procesos en ayuda de Java: link

Aquí puede encontrar algunos ejemplos de código, que se ejecuta el proceso en Java: link

Sin embargo los datos de los flujos de salida de error y estarán disponibles para usted después de que termine el proceso (su programa será "detenido" en línea con el método .exec() hasta que finalice el subproceso).

Para interactuar con el proceso en ejecución, debe utilizar otro hilo.

Using a thread to capture process output

Interacting with another process Java

Cuestiones relacionadas