Entrées/Sorties

Sorties par défaut

Nous avons déjà utilise des fonctions d'entrées/sortie. Par exemple : System.out.println("mon message") est une méthode de la classe d'e/s PrintStream qui écrit sur la sortie par défaut. On y trouve les méthodes générales suivantes : Comme en C, il existe un autre flux standard de sortie qui est plus particulierement reserve a la gestion des erreurs : System.err.

Ces flux standards peuvent etre reaffectes par la methode System.setOut(PrintStream nouveau).

Entrees par défaut

De la meme facon, on trouve un flux standard d'entree qui s'appelle System.in et sur lequel on peut travailler. Ce flux d'entree appartient a la classe InputStream qui lit des informations sur l'entree par défaut. On y trouve les methodes generales suivantes : Ce flux standard peut etre reaffecte par la methode setIn(InputStream nouveau).

Entrees/Sorties sur des fichiers (a acces sequentiel)

Un fichier est un objet de classe File a partir duquel on peut definir un flux d'entree ou de sortie. L'exemple suivant lit le fichier ASCII io.0.html caractere par caractere, affiche le code de chaque caractere lu a l'ecran, puis ecrit ce caractere dans un nouveau fichier io.0.txt.
 
import java.io.*;

class entree_sortie

{

    public static void main(String[] args) 

      File fichier_entree, fichier_sortie ;

      FileInputStream mon_in ;

      FileOutputStream mon_out ;

      int c ;

      try

        fichier_entree = new File("io.0.html") ; mon_in = new FileInputStream (fichier_entree);

        fichier_sortie = new File("io.0.txt") ; mon_out = new FileOutputStream (fichier_sortie);

        while ((c = mon_in.read()) != -1) 

        { mon_out.write(c) ; System.out.print(c) ; }

        mon_in.close() ; mon_out.close();

      } catch (FileNotFoundException e) { System.err.println("entree_sortie : " + e); }

      } catch (IOException e) { System.err.println("entree_sortie : " + e); } 

    }
}

NB : pour des raisons de securite, un tel programme ne marche pas avec les Applets.

Filtrage des e/s de base

La gestion des flux peut etre amelioree en utilisant les classes DataInputStream et DataOutputStream qui filtrent les donnees (la gestion caractere par caractere est en effet un peu primaire). Pour cela, il suffit juste d'ajouter une ligne du style :
 
    ../..

    DataInputStream filtre_in = new DataInputStream(mon_in) ;

    DataOutputStream filtre_out = new DataOutputStream(mon_out) ;

    ../..

Il est alors possible de faire des lectures et des ecritures formatees :


Ph. RIS 1997