[JAVA] À propos du flux d'entrée standard (System.in) une fois fermé

introduction

・ À propos de ʻInput Stream Reader (System.in) `qui est pris en charge par l'entrée standard -Lorsque j'essaye d'ouvrir un flux d'entrée standard qui a été fermé, il reste fermé et ne s'ouvre pas.

Vous ne pouvez pas ouvrir un flux d'entrée standard une fois fermé?

C'est un flux d'entrée standard qui est pris en charge lors de la saisie de quelque chose depuis la console, mais il semble que le flux d'entrée standard une fois fermé dans le même programme ne puisse pas être ouvert.

Par exemple


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

public class Test {

	public static void main(String[] args) {
		try {
			//Système lors de la deuxième entrée.en reste fermé
			for (int i = 0; i < 2; i++) {
				streamTest1();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 *Renvoie la chaîne de caractères d'entrée standard à la console telle quelle
	 * @throws IOException
	 */
	private static void streamTest1() throws IOException {
		try (BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in))) {
			System.out.print("contribution>");
			String st = br1.readLine();
			System.out.println("production>" + st);
		}
	}
}

En essayant de faire ça Sur la ligne String st = br1.readLine (); dans streamTest1 java.io.IOException: Stream closed A été retourné, et il s'est avéré que le flux d'entrée standard était toujours fermé.

Solution jusqu'ici

Autant que je peux, lors de l'utilisation de plusieurs flux d'entrée standard dans le même programme, je ne peux penser à les fermer qu'après le dernier flux. C'est,

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

	/**
	 *Renvoie la chaîne de caractères d'entrée standard à la console telle quelle
	 *
	 * @throws IOException
	 */
	private static void streamTest1() throws IOException {
		//Essayez le bloc supérieur de répétition-with-Apportez une déclaration de ressources
		try (BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in))) {
			int i = 0;
			while (i < 2) {
				System.out.print("contribution>");
				String st = br1.readLine();
				System.out.println("production>" + st);
				i++;
			}
		}
	}
}

Vous pouvez utiliser le flux d'entrée standard à plusieurs reprises en faisant.

Résumé

-Lorsque j'essaye d'ouvrir et d'utiliser un flux d'entrée standard qui a été fermé une fois, il reste fermé et ne peut pas être utilisé. -Fermez le flux d'entrée standard pour le moment après la dernière utilisation du flux.

... Je pense qu'il existe un moyen de le fermer et de l'utiliser à nouveau. ..

Recommended Posts

À propos du flux d'entrée standard (System.in) une fois fermé
Vérifiez à nouveau la commande OpenSSL
À propos de la méthode
À propos de la classe standard
À propos du paquet
Entrée standard Ruby