java eclipse file stdin system.in

java - Eclipse leyendo stdin(System.in) desde un archivo



file (11)

¿Es posible que Eclipse lea stdin de un archivo?


Actualización 2015

¡Hay una nueva versión de Eclipse, Eclipse 4.5 (Mars) que ha solucionado bugs.eclipse.org/bugs/show_bug.cgi?id=155411 !

Este es el anuncio y la descripción de la función: http://eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file

Stdin ahora se puede asignar a un archivo en la pestaña Común de los diálogos de configuración de inicio.

Como era de esperar, esta es una nueva característica del recién lanzado eclipse 4.5 y, por lo tanto, no funcionará en una versión anterior.


Pure Java

Puede redirigir System.in con una sola línea de código:

System.setIn(new FileInputStream(filename));

Ver System.setIn() .

Configuración de Eclipse

En Eclipse 4.5 o posterior, el diálogo de configuración de inicio puede configurar System.in para leer desde un archivo. Vea el anuncio aquí .


En la pestaña "común" del cuadro de diálogo Ejecutar, en "Entrada y salida estándar" hay una casilla de verificación para "archivo". pero parece ser solo para salida ...

Esperaría ver 2 campos de archivos allí, uno para estándar, uno para estándar con las opciones de agregar.


La solución para mí (ejecutándose en una Mac, usando Eclipse CDT para una aplicación C) era agregar "<ruta / a / algún archivo" al final de otros argumentos en la pestaña "Argumentos" del cuadro de diálogo "Ejecutar configuración".

También consulte esta otra pregunta para obtener una respuesta que involucre el lanzamiento de un programa Java en estado suspendido y luego adjuntar el depurador usando Eclipse.


Lo que hice fue crear un objetivo Ant y ejecutarlo como "Ejecutar Externo" desde Eclipse, estos son los pasos:

  • Tengo un archivo de entrada para leer desde: res/in.txt y uno para la salida: res/out.txt
  • Cree un build.xml con los objetivos que necesita (esto es solo un ejemplo):

    <project basedir="." default="run" name="Tests"> <target name="clean"> <delete dir="bin"/> </target> <target name="compile"> <mkdir dir="bin"/> <javac srcdir="src" destdir="bin" includeantruntime="false"/> </target> <target name="build" depends="clean,compile"/> <target name="run" depends="build"> <java classname="Main" input="res/in.txt" output="res/out.txt" classpath="bin" /> </target> </project>

  • En Eclipse, vaya a: Run->External Tools->External Tools Configurations->Ant Build-> New Launch Configuration use la siguiente configuración:

Section Main

Buildfile: ${workspace_loc:/Tests/build.xml}

Directorio base: ${workspace_loc:/Tests}

* Nota: Tests es el nombre de mi proyecto Eclipse

Ahora puede ejecutar su proyecto haciendo clic en el botón Ejecutar la barra de herramientas Extenal y cambiar los archivos de entrada o salida según lo necesite


No veo una buena manera de hacerlo usando el diálogo estándar de Ejecución de Eclipse. Sin embargo, es posible que pueda hacerlo con un iniciador de herramientas externo y usar la sintaxis estándar "<infile" o llamar a un script .bat / .sh para que lo haga por usted.

No es automático, que es lo que supongo que quiere, pero puede copiar y pegar el contenido de su archivo en la consola de Eclipse cuando inicia su programa.


Para Linux: creo que la forma más fácil es escribir un sh-script.

1) escriba run.sh así:

su programa con params <input.txt

2) En la configuración del perfil de Eclipse, especifique

[tab Main] C ++ Run Application = / bin / sh

[tab Arguments] Argumentos del programa = run.sh

Eso es. Cuando ejecute su proyecto, verá la salida del script en la consola de eclipse. Puedes hacer algo similar en Windows.



Tendrás que modificar tu código para que funcione en eclipse. Las otras respuestas anteriores no funcionaron cuando lo intenté. Otro que he visto decir para cambiar Ejecutar ..> Pestaña común> Entrada y salida estándar> El archivo solo cambió el comportamiento estándar al archivo, no a la entrada.

La solución fue tomar la opción "-d" a una solución viable. Si pones algo en los argumentos del programa, simplemente pasará a tu principal. Entonces, lo que puedes hacer al principio de main es algo como esto:

Scanner in; if (args!=null && args.length>0 && args[0].equals("-d")){ in = new Scanner(new File(args[1])); } else { in = new Scanner(System.in); }

Aún deberá configurar los argumentos de su programa en el menú Ejecutar como se describe en this respuesta.


[Actualización] Como se ha señalado en los comentarios, esta respuesta fue engañosa, así que la actualicé para corregir los errores. [/Actualizar]

En bash o símbolo del sistema, puede hacer: C:/myprogramm < file.txt (Windows) o ./myprogramm < file.txt (Linux)

Lamentablemente, en Eclipse no es posible obtener el mismo resultado, ya que no hay ninguna opción para vincular el stdin a un archivo en eclipse. En su lugar, tendrá que abrir manualmente una secuencia de archivos en su código, y luego leer en su lugar. Una forma de hacerlo es usar un argumento de programa para habilitarlo y otro con el parámetro de archivo. Consulte la respuesta de Scott sobre qué tipo de código necesita agregar para analizar la opción -d de la matriz de argumentos del programa.

Cuando desee apuntar a algún archivo dentro de su proyecto Eclipse, debe tener cuidado de obtener la ubicación correcta y usar la variable $ {resource_loc:}:

-d ${resource_loc:/MyProject/file}

por supuesto, también puedes poner una ruta absoluta:

-d path/to/file or -d C:/path/to/file

El parámetro resource_loc se refiere a su espacio de trabajo. Esa es la carpeta donde se almacenan todos los proyectos de eclipse. A partir de ahí, todavía tiene que hacer referencia a la carpeta de su proyecto y luego al archivo que desea cargar.

Puede que tenga que ajustar la dirección de barra diagonal, dependiendo de si usa Linux o Winodws.


< ${workspace_loc:/MyProject/file}

en la configuración de depuración / argumentos / argumentos del programa:

funciona bien para mi