Up Next

B.5.1  Le minimum à savoir : une entrée et une sortie standard

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 :

Reader in =  new InputStreamReader(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 :

Voici Cat (source Cat.java) un filtre trivial qui copie l’entrée standard dans la sortie standard :

import java.io.*; // La classe Reader est dans le package java.io

class Cat {
  public static void main(String [] arg) {
    try {
      Reader in =  new InputStreamReader(System.in) ;
      for ( ; ; ) {// Boucle infinie, on sort par break
        int c = in.read ();
        if (c == -1) break;
        System.out.print ((char)c);
      }
    } catch (IOException e) { // En cas de malaise
      System.err.print("Malaise : " + e.getMessage()) ;
      System.exit(2) ; // Terminer le programme sur erreur
    }
  }
}

Remarquons :

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
  ⋮

Up Next