java redirect exec execution fileinputstream

(Java) Redirección de archivos(en ambos sentidos) dentro de Runtime.exec?



redirect execution (1)

A menos que esté enviando un nombre de archivo a la entrada estándar del proceso, no hay distinción de si los datos provienen de un archivo o de cualquier otra fuente de datos.

OutputStream escribir en el OutputStream dado por Process.getOutputStream() . Los datos que escribe le permiten leer desde un archivo utilizando FileInputStream .

Poner eso juntos podría ser algo como esto:

Process proc = Runtime.getRuntime().exec("..."); OutputStream standardInputOfChildProcess = proc.getOutputStream(); InputStream dataFromFile = new FileInputStream("theFileWithTheData.dat"); byte[] buff = new byte[1024]; for ( int count = -1; (count = dataFromFile.read(buff)) != -1; ) { standardInputOfChildProcess.write(buff, 0, count); }

He omitido muchos detalles, esto es solo para entenderlo. Querrá cerrar las cosas de forma segura, quizás desee considerar el almacenamiento en búfer y deberá preocuparse por las trampas de Runtime.exec() .

Editar

Escribir el resultado en un archivo es similar. Obtenga un FileOutputStream apunta al archivo de salida y escriba los datos que haya leído de Process.getInputStream() en ese OutputStream . La principal advertencia aquí es que debe hacer esta operación en un segundo subproceso, ya que el acceso a dos secuencias de bloqueo del mismo subproceso conducirá a interbloqueo (consulte el artículo anterior).

Quiero ejecutar este comando:

/ceplinux_work3/myName/opt/myCompany/ourProduct/bin/EXECUTE_THIS -p cepamd64linux.myCompany.com:19021/ws1/project_name < /ceplinux_work3/myName/stressting/Publisher/uploadable/00000.bin >> /ceplinux_work3/myName/stressting/Publisher/stats/ws1.project_name.19021/2011-07-22T12-45-20_PID-2237/out.up

Pero no funciona porque EXECUTE_THIS requiere un archivo de entrada a través de la redirección, y simplemente pasar este comando a Runtime.exec no funciona.

Nota al margen: busqué todo sobre cómo resolver esto antes de venir aquí para preguntar. Hay muchas preguntas / artículos en la web sobre Runtime.exec y la redirección de entrada / salida. Sin embargo, no puedo encontrar ninguno que se ocupe de pasar un archivo a un comando y enviar el resultado a otro archivo. Además, no estoy totalmente familiarizado con las transmisiones de Entrada / Salida, así que me cuesta mucho reunir toda la información para mi situación específica.

Dicho esto, cualquier ayuda es muy apreciada.

PD: Si hay varias formas de hacerlo, prefiero lo que sea más rápido en términos de rendimiento.

Editar: como se discutió en mi última pregunta, NO PUEDO cambiar esto a una llamada bash porque el programa debe esperar a que este proceso finalice antes de continuar.