Previous Up Next

B.5.3  Encore un peu plus que le minimum : écrire dans un fichier

La sortie standard est souvent insuffisante, on peut vouloir écrire plus d’un fichier ou ne pas obliger l’utilisateur à faire une redirection. On se dit donc qu’il doit bien y avoir un moyen d’obtenir un flux de caractères en sortie connecté à un fichier dont on donne le nom. Le flux de sortie le plus simple est le Writer, qui possède une méthode write(int c) pour écrire un caractère. Comme pour les Reader on utilise en pratique des sous-classes de Writer. Il existe entre autres un FileWriter que nous utilisons pour écrire une version simple de la commande Unix cp (source Cp.java), où cp name1 name2 copie le contenu du fichier name1 dans le fichier name2.

import java.io.* ;
class Cp {
  public static void main(String [] arg) {
    if (arg.length != 2) {
      System.err.println("Usage : java Cp name1 name2") ;
      System.exit(2) ;
    }
    String name1 = arg[0], name2 = arg[1] ;
    try {
      Reader in = new FileReader(name1) ;
      Writer out = new FileWriter(name2) ;
      for ( ; ; ) {
        int c = in.read() ;
        if (c == -1) break ;
        out.write(c) ;
      }
      out.close() ; in.close() ;
    } catch (IOException e) {
      System.err.println("Malaise : " + e.getMessage()) ;
      System.exit(2) ;
    }
  }
}

Il y a peu à dire, mais remarquons que nous prenons soin de fermer les flux que nous ouvrons. Cela semble une bonne habitude à prendre (voir aussi B.5.6 pour tout savoir ou presque).


Previous Up Next