Línea de comandos de la Tubería de Entrada en Java
-
07-07-2019 - |
Pregunta
Aquí es un simple trozo de código:
import java.io.*;
public class Read {
public static void main(String[] args) {
BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String x = null;
try{
x = f.readLine();
}
catch (IOException e) {e.printStackTrace();}
System.out.println(x);
}
}
}
Puedo ejecutar esto como :java Leer < de entrada.txt
Una vez que el input.txt es completamente entubada en el programa, x sigue infinito de valores nulos.¿Por qué es eso así?Hay un camino por el que puedo hacer En la Norma(Línea de Comando) activa después de que el archivo que se introducen en el código se hace?He tratado de cierre de la secuencia y volver a abrir, no funciona.Reset etc también.
Solución
Al ejecutar "java Read < input.txt"
le ha dicho al sistema operativo que para este proceso, el archivo canalizado es estándar. No puede volver a la línea de comando desde la aplicación.
Si desea hacer eso, luego pase input.txt como parámetro de nombre de archivo a la aplicación, abra / lea / cierre el archivo usted mismo desde dentro de la aplicación, luego lea desde la entrada estándar para obtener cosas de la línea de comando.
Otros consejos
Bueno, esto es típico para leer en un BufferedReader
. readLine()
devuelve null
cuando se alcanza el final de la transmisión. Tal vez su bucle infinito sea el problema ;-)
// try / catch ommitted
String x = null;
while( (x = f.readLine()) != null )
{
System.out.println(x);
}
Necesita terminar su ciclo while cuando la línea es nula, así:
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
}
catch (IOException e) {
logger.error("IOException reading System.in", e);
throw e;
}
finally {
if (in != null) {
in.close();
}
}
Hay un camino por el que puedo hacer En la Norma(Línea de Comandos) activa después de que el archivo que se introducen en el código se hace?
Lo siento golpear una vieja pregunta, pero ninguna de las respuestas hasta ahora señala que no es un (shell-la única) manera que para pasar de nuevo a la consola de entrada después de las tuberías en un archivo.
Si ejecuta el comando
{ cat input.txt & cat; } | java Read
a continuación, el texto de input.txt
se pasa a java Read
y entonces cayó de nuevo a la entrada de la consola.
Tenga en cuenta que si usted, a continuación, presione Ctrl+D, usted conseguirá el bucle infinito de null
s, a menos que se modifique el programa para finalizar el bucle cuando se recibe null.