[JAVA] Über den Standardeingabestream (System.in) nach dem Schließen

Einführung

・ Über InputStreamReader (System.in), für den die Standardeingabe sorgt -Wenn ich versuche, einen geschlossenen Standard-Eingabestream zu öffnen, bleibt dieser geschlossen und wird nicht geöffnet.

Kann ein Standard-Eingabestream nach dem Schließen nicht geöffnet werden?

Es handelt sich um einen Standardeingabestream, der bei der Eingabe über die Konsole berücksichtigt wird. Es scheint jedoch, dass der Standardeingabestream, der einmal im selben Programm geschlossen wurde, nicht geöffnet werden kann.

Zum Beispiel


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

	public static void main(String[] args) {
		try {
			//System bei der zweiten Eingabe.in bleibt geschlossen
			for (int i = 0; i < 2; i++) {
				streamTest1();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 *Gibt die Standardeingabezeichenfolge unverändert an die Konsole zurück
	 * @throws IOException
	 */
	private static void streamTest1() throws IOException {
		try (BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in))) {
			System.out.print("Eingang>");
			String st = br1.readLine();
			System.out.println("Ausgabe>" + st);
		}
	}
}

Wenn Sie versuchen, dies zu tun In der Zeile String st = br1.readLine (); in streamTest1 java.io.IOException: Stream closed Es stellt sich heraus, dass der Standardeingabestream noch geschlossen ist.

Bisher Lösung

Soweit ich kann, kann ich bei Verwendung mehrerer Standardeingabestreams im selben Programm nur daran denken, sie nach dem letzten Stream zu schließen. Das ist,

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

	public static void main(String[] args) {
		try {
			streamTest1();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 *Gibt die Standardeingabezeichenfolge unverändert an die Konsole zurück
	 *
	 * @throws IOException
	 */
	private static void streamTest1() throws IOException {
		//Probieren Sie den oberen Wiederholungsblock an-with-Bringen Sie eine Ressourcenanweisung mit
		try (BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in))) {
			int i = 0;
			while (i < 2) {
				System.out.print("Eingang>");
				String st = br1.readLine();
				System.out.println("Ausgabe>" + st);
				i++;
			}
		}
	}
}

Sie können den Standardeingabestream wiederholt verwenden, indem Sie dies tun.

Zusammenfassung

-Wenn ich versuche, einen einmal geschlossenen Standardeingabestream zu öffnen und zu verwenden, bleibt er geschlossen und kann nicht verwendet werden.

... Ich denke, es gibt eine Möglichkeit, es zu schließen und wieder zu verwenden. ..

Recommended Posts

Über den Standardeingabestream (System.in) nach dem Schließen
Überprüfen Sie noch einmal den OpenSSL-Befehl
Über die Methode
Über die Standardklasse
Über das Paket
Ruby-Standardeingabe