2012-03-13 9 views
12

Estoy desarrollando una aplicación con Netbeans y Maven. Mi aplicación debe obtener datos de stdin. Pero no pude entender cómo probarlo. Poner < data.txt en la lista de argumentos no funciona.¿Hay alguna manera de redirigir la entrada del archivo a stdin en Netbeans?

necesito lo mismo que:

$ java MyProgram < data.txt 
+0

¿Por qué usa stdin como entrada y no simplemente un parámetro que accede a un archivo? – khmarbaise

+0

@khmarbaise Es más rápido escribir/leer desde el proceso principal al secundario en lugar de: abrir archivo/escribir en archivo/cerrar archivo/ejecutar proceso/abrir archivo/leer desde archivo/cerrar archivo. Con mi escenario no dependo del rendimiento del sistema de archivos y pude leer desde la secuencia mientras el proceso principal está escribiendo en él ... – denys

Respuesta

6

Esto puede hacerse agregando su propio destino de ejecución al archivo build.xml de su proyecto. Por ejemplo:

<target name="run" depends="jar"> 
    <exec dir="${work.dir}" executable="java" input="${work.dir}/inputfile.txt"> 
    <arg value="-jar"/> 
    <arg file="${dist.jar}"/> 
    </exec> 
</target> 

Tenga en cuenta que los comandos tales como Run, depuración y prueba sólo utilizan su build.xml personalizada Si el compilador en Save función está desactivada para el proyecto. Por lo tanto, deberá asegurarse de que Compile al guardar esté desactivado en las propiedades de su proyecto.

+0

Me pregunto por qué 'Compile on Save' debe estar desactivado para que esto funcione? –

10

Asumo que tienen una cosa así:

public static void main(String[] args) { 
... 
} 

Esto se puede utilizar como un punto de entrada a su aplicación y antes de que cambie el canal de entrada a través de:

FileInputStream is = new FileInputStream(new File("test.data")); 
System.setIn(is); 

Lo anterior se puede utilizar en una unidad/prueba de integración.

+0

Esto es muy conveniente en comparación con la solución @ZeroTau –

+0

Pero cambiará la función del código Tengo miedo - es decir el programa resultante leerá la entrada del archivo 'test.data' en lugar del flujo de entrada estándar. –

1

No estoy seguro de cómo está en NetBeans, pero en eclipse puede escribir algo en la consola y se lo redirecciona como STDIN a la aplicación en ejecución. Creo que lo mismo debería funcionar en NetBeans también. Entonces, simplemente ejecute su aplicación, luego copie/pegue el contenido de data.txt en la consola y probablemente presione <ENTER>.

Si nada ayuda el uso de depuración remota, es decir, ejecutar el programa de línea de comandos de la siguiente manera:

java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y MyProgram < data.txt

a continuación, conecte a este proceso de NetBeans.

+0

usted es quien entendió mi pregunta. Pero desafortunadamente tal shell strig no funciona en Netbeans :( – denys

1

Vieja escuela, pero es lo que yo sabía. Una advertencia es que el comando mvn no regresa al cli cuando termina, pero para algunos propósitos esto es aceptable. Tenga en cuenta que debe estar en el directorio raíz del proyecto

mvn "-Dexec.args = -classpath% classpath com.mycompany.test" -Dexec.executable =/Downloads/jdk1.7/bin/java exec-maven- plugin: 1.2.1: exec </tmp/Input

0

Agregue un nuevo destino "ejecutar-entrada" en Files-> build.xml con el siguiente texto. Nota: esta versión usa la ubicación correcta del tiempo de ejecución de java. Además, asume que ha creado un directorio llamado entradas con el archivo input1.

<target name="run-input" depends="jar"> 
    <exec dir="${work.dir}" executable="${java.home}/bin/java" input="${src.dir}/inputs/input1"> 
    <arg value="-jar"/> 
    <arg file="${dist.jar}"/> 
    </exec> 
</target> 

Siempre se puede crear un acceso directo para este nuevo objetivo.

Cuestiones relacionadas