Nous connaissons déjà la sortie standard, c’est
System.out
— et System.err
est la sortie d’erreur.
Nous savons déjà écrire dans ces flux de classe PrintStream,
par leurs méthodes print
et println
.
Pour lire l’entrée standard (System.in
, comme vous
pouviez vous en douter), c’est un rien plus complexe, mais sans plus.
Il faut tout d’abord fabriquer un flux de caractères, objet de la classe,
Reader
(voir aussi B.6.2.1)
à partir de System.in
:
On note que l’objet InputStreamReader
est rangé dans une variable
de type Reader
. Et en effet, InputStreamReader
est une
sous-classe de Reader
(voir B.2.3).
Ensuite, on peut lire le prochain caractère de l’entrée par l’appel
in.read()
.
Cette méthode renvoie un int
,
avec le comportement un peu tordu suivant :
IOException
est lancée. Ces
erreurs sont du genre de celles détectées au niveau du système
d’exploitation, comme la panne d’un disque (rare !), ou un délai
abusif de transmission par le réseau (plus fréquent). Bref,
l’exception est lancée quand, pour une raison ou une autre, la lecture
est jugée impossible.
Voici Cat
(source Cat.java) un filtre trivial
qui copie l’entrée standard dans la sortie standard :
Remarquons :
IOException
, qui doit être attrapée dans main si elle n’est pas
déclarée dans la signature de main.
À la fin du traitement de l’exception, on utilise la méthode
System.exit
qui arrête le programme d’un coup.
Le message d’erreur est écrit dans la sortie d’erreur.
(char)c
. Sinon, c’est un code de caractère qui
s’affiche.
On peut tester le programme Cat
par exemple ainsi :
% java Cat < Cat.java import java.io.*; // La classe Reader est dans le package java.io ⋮