Frage

Hier ist ein einfaches Stück Code:

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);
  }
 }
}

ich ausführen dieses als: java Lesen

Sobald die input.txt vollständig in das Programm geleitet wird, hält x unendlich nulls bekommen. Warum ist das so? Gibt es eine Möglichkeit, durch die ich den Standard in (Command Line) aktiv, nachdem die Datei in den Code eingespeist wird getan wird machen können? Ich habe versucht, den Stream zu schließen und erneuten Öffnen funktioniert es nicht. Zurücksetzen etc auch.

War es hilfreich?

Lösung

Durch die Ausführung "java Read < input.txt" Sie haben das Betriebssystem mitgeteilt, dass für diesen Prozess, die verrohrt Datei ist Standard in. Sie können dann nicht auf die Kommandozeile zurückschalten von innerhalb der Anwendung.

Wenn Sie das tun wollen, dann passiert input.txt als Dateinamen Parameter an die Anwendung, öffnen / lesen / schließen Sie die Datei selbst aus dem Innern der Anwendung, dann von der Standardeingabe liest Zeug von der Kommandozeile zu erhalten.

Andere Tipps

Nun, das ist typisch für in einem BufferedReader lesen. readLine() kehrt null wenn Ende Strom getroffen wird. Vielleicht ist Ihre unendliche Schleife ist das Problem; -)

// try / catch ommitted

String x = null;

while( (x = f.readLine()) != null )
{
   System.out.println(x);
}

Sie benötigen eine while-Schleife zu beenden, wenn die Zeile leer ist, wie folgt aus:

    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();
        }
    }
  

Gibt es eine Möglichkeit, durch die ich den Standard in (Command Line) machen können   aktiv, nachdem die Datei in den Code eingespeist wird getan?

Leider eine alte Frage stoßen, aber keine der Antworten bisher weist darauf hin, dass es ist ein (Shell-only) Weg zurück passieren Eingabe in einer Datei nach der Rohrleitung zu trösten.

Wenn Sie den Befehl

{ cat input.txt & cat; } | java Read

dann wird der Text von input.txt geführt werden, um java Read und Sie werden dann zurück Eingang zu trösten fallen gelassen werden.

Beachten Sie, wenn Sie drücken Sie die Strg + D , werden Sie die Endlosschleife von nulls erhalten, wenn Sie Ihr Programm modifizieren, um die Schleife zu beenden, wenn es null erhält.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top