Les entrées sorties en java Utilisation de la notion de flux Accès séquentielle à des objets en lecture ou en écriture Indépendant du type d'entrées-sorties: fichiers, buffers, pipes, sockets, etc 1 Les flux en entrées C'est un canal de communication entre une source et un programme «lecteur » 2 Les flux de sorties Un flux de sortie représente un canal de communication entre un programme «écrivain » et un destinataire 3 Les catégories de flux Les flux par octets: codage direct des données byte à byte Les flux caractères: formats textuels (un caractère est codé sur 2 bytes (format unicode) 4 Les modes d'accès : principe Ecrire/lire c'est faire transiter des flux d'octets ou de caractères dans des tuyaux 2 tailles de tuyaux: les tuyaux pour un octet, les tuyaux pour un caractère Octets: les flux finissent en outputStream ou inputStream (ex: FileInputStream) Caractères: les flux finissent en Reader ou Writer (ex: FileReader, BufferedWriter) Flux d'octets ou de caractères 5 Les types de flux Deux sens de fonctionnement En lecture ("aspiration"): xxxInputStream, xxxReader En écriture ("envoi"): xxxOutputStream, xxxWriter 6 Les types de flux Différents types de tuyaux: Les tuyaux qui se trouvent près des éléments d'entrée/sortie (File, Socket, Pipe, String, etc.) Les tuyaux de haut niveau qui implémentent des services (BufferedReader, FilterOutputStream, ObjectInputStream, DataOutputStream...) Les tuyaux de conversion: InputStreamReader (o -> c), OutputStreamWriter (c -> o)…` 7 Les classes flux d'octets En entrée 8 Les classes flux d'octets En sortie 9 Les classes flux de caractères En entrée 10 Les classes flux de caractères En sortie 11 exemple Copie de fichier (méthode non efficace) public class Copy { public static void main(String[] args) throws IOException { File inputFile = new File("fichier_entree.txt"); File outputFile = new File("fichier_sortie.txt"); FileReader in = new FileReader(inputFile); FileWriter out = new FileWriter(outputFile); int c; while ((c = in.read()) != -1) out.write(c); in.close(); out.close(); } } 12 Exemple (2) Copie de fichier (méthode avec un tampon) public class Copy { public static void main(String[] args) throws IOException { File inputFile = new File("fichier entree.txt"); File outputFile = new File("fichier sortie.txt"); FileReader in = new BufferedR eader(new FileReader(inputFile)); FileWriter out = new FileWriter(outputFile); int c; while ((c = in.read()) != -1) out.write(c); in.close(); out.close(); } } 13 Exemple (3) Utilisation des dataOutputStream DataOutputStream out = new DataOutputStream(new FileOutputStream("facture.txt")); double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 }; int[] units = { 12, 8, 13, 29, 50 }; String[] descs = { "Java T-shirt", "Java Mug", "Duke Juggling Dolls", "Java Pin", "Java Key Chain" }; for (int i = 0; i < prices.length; i ++) { out.writeDouble(prices[i]); out.writeChar('\t'); out.writeInt(units[i]); out.writeChar('\t'); out.writeChars(descs[i]); out.writeChar('\n'); } out.close(); 14 La classe Scanner Paquetage java.util Lecture de tout type simple de données Entier, caractère, réel,... Lecture d'une ligne à la fois Test de présence dans le flux du type présumé hasInt() Test de présence de données dans le flux hasNext() 15 Les flux standards static PrintStream out Static inputStream in Static PrintStream err Accessible à partir de la classe System qui est non instanciable 16