・ Ü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.
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.
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.
-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. ..