Entrées / Sorties. Entrées / Sorties. Entrées/Sorties. System.out. Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T. Terrain connu.



Documents pareils
Flux de données Lecture/Ecriture Fichiers

Cours 14 Les fichiers

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Développement Logiciel

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

PROGRAMMATION PAR OBJETS

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Projet de programmation (IK3) : TP n 1 Correction

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Auto-évaluation Programmation en Java

Programmer en JAVA. par Tama

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Programmation système I Les entrées/sorties

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Plan du cours. Historique du langage Nouveautés de Java 7

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

et se trouve popularisé rapidement pour ses possibilités de développement liés au Web. Les

Une introduction à Java

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

as Architecture des Systèmes d Information

Programmation Internet en Java

Java Licence Professionnelle CISII,

Premiers Pas en Programmation Objet : les Classes et les Objets

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Gestion distribuée (par sockets) de banque en Java

Langage Java. Classe de première SI

TP1 : Initiation à Java et Eclipse

Programmation en Java IUT GEII (MC-II1) 1

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Remote Method Invocation (RMI)

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Cours 1: Java et les objets

Java Licence Professionnelle CISII,

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

INITIATION AU LANGAGE JAVA

Synchro et Threads Java TM

Généralités sur le Langage Java et éléments syntaxiques.

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

TD/TP PAC - Programmation n 3

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmation Orientée Objet Java

RMI le langage Java XII-1 JMF

Initiation à la programmation orientée-objet avec le langage Java

Corrigé des exercices sur les références

Programmation par les Objets en Java

Dis papa, c est quoi un bus logiciel réparti?

Chapitre 10. Les interfaces Comparable et Comparator 1

Le modèle client-serveur

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Programmation impérative

Introduction au langage Java

Package Java.util Classe générique

INF 321 : mémento de la syntaxe de Java

GESTION DES FICHIERS C/UNIX

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Utilisation d objets : String et ArrayList

Programmation Par Objets

Programmation client-serveur sockets - RPC

Langage à objets : JAVA (1)

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Programmation avec des objets : Cours 7. Menu du jour

Héritage presque multiple en Java (1/2)

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Remote Method Invocation Les classes implémentant Serializable

Exercices sur les interfaces

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Initiation à JAVA et à la programmation objet.

Introduction à JDBC. Accès aux bases de données en Java

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

TD3: tableaux avancées, première classe et chaînes

Programmation système de commandes en C

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

1 Lecture de fichiers

Cours de Système : Gestion de Fichiers

Certificat Big Data - Master MAthématiques

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Design patterns. Design patterns - définition. Design patterns - avantages

Utiliser Java sans BlueJ

TP : Gestion d une image au format PGM

TD/TP PAC - Programmation n 3

Introduction : les processus. Introduction : les threads. Plan

Objets et Programmation. origine des langages orientés-objet

Travaux Pratiques : Lucène - Gestion d un index plein texte

Le système de gestion des fichiers, les entrées/sorties.

Education Delivery Intelligent Tool

TP3 : Manipulation et implantation de systèmes de fichiers 1

LOG4430 : Architecture logicielle et conception avancée

Cahier des Charges du Projet Domotique. Choquet Mathieu Masson Jérôme Groupe 6. Domotique. p.1

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Structurer ses données : les tableaux. Introduction à la programmation

Apprendre Java en 154 minutes

Transcription:

Entrées / Sorties Entrées/Sorties Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T Karima Boudaoud IUT GTR-Sophia Antipolis 2 Terrain connu Entrées / Sorties la classe java.lang.system cette classe gère l interface avec le système d'exploitation System.out.println("Accrochez-vous!"); 3 flots standards System.in; // entrée à la console System.out; // affichage à l'écran System.err; // affichage à l'écran ce sont des objets static Type System.out c est un objet de type java.io.printstream Caractéristiques produit un flot d'octets formaté pour affichage possède une méthode print pour chaque type print(int i); // octets pour entier print(double d); // octets pour double print(char c); // octets pour caractère... print(object o); // o.tostring() Karima Boudaoud IUT GTR-Sophia Antipolis 3 Karima Boudaoud IUT GTR-Sophia Antipolis 4

idem que System.out System.err permet d indiquer des erreurs Type System.in c est un objet de type java.io.inputstream Caractéristiques comme pour OutputStream, il propose une fonctionnalité de base possède une seule méthode public int read(); // lit un octet attend le prochain octet en entrée retourne 0 < son code < 255 si plus rien, renvoie -1 Karima Boudaoud IUT GTR-Sophia Antipolis 5 Karima Boudaoud IUT GTR-Sophia Antipolis 6 Exemple import java.io.*; public class Naif { public static void main(string[] args) throws IOException { int b, nb = 0; // lecture de caractères au clavier while((b = System.in.read())!= -1) { nb++; System.out.print((char) b); } System.out.println("nb = " + nb); } le résultat peut surprendre... Karima Boudaoud IUT GTR-Sophia Antipolis 7 Object Paquetage java.io InputStream Lecture d'octets OutputStream Ecriture d'octets Reader Lecture de caractères Unicode Writer Ecriture de caractères Unicode File Maniement de noms de fichiers et de répertoires StreamTokenizer Lecture et écriture de flots d octets Lecture et écriture de flots de caractères Unicode Pour représenter fichiers et répertoires Analyse lexicale d un flot d entrée Analyse lexicale d'un flot d'entrée Karima Boudaoud IUT GTR-Sophia Antipolis 8

Lecture de flots d octetsd Écriture de flots d octetsd Hiérarchie des principales classes de lecture d un flot d octets Hiérarchie des principales classes d écriture d un flot d octets Doit être sousclassée FilterInputStream Décorateur BufferedInputStrea Entrées bufférisées DataInputStream Lecture des types primitifs InputStream Classe abstraite de base FileInputStream Lecture d'un fichier ObjectInputStream Lecture d'un objet sérialisé Doit être sousclassée FilterOutputStream Décorateur BufferedOutputStream Sorties bufférisées DataOutputStream Ecriture de types primitifs PrintStream Utilisé par System.out Ne pas utiliser autrement OutputStream Classe abstraite de base FileOutputStream Ecriture d'un fichier ObjectOutputStream Ecriture d'un objet sérialisé Karima Boudaoud IUT GTR-Sophia Antipolis 9 Karima Boudaoud IUT GTR-Sophia Antipolis 10 Lecture et écriture de flots d octets Classe pour entrée Classe pour sortie Fonctions fournies InputStream OutputStream Classes abstraites de base pour lecture et écriture d un flot de données FilterInputStream FilterOutputStream Classe mère des classes qui ajoutent fonctionnalités à Input/OutputStream BufferedInputStream BufferedOutputStream Lecture et écriture avec buffer DataInputStream DataOutputStream Lecture et écriture des types primitifs FileInputStream FileOutputStream Lecture et écriture d un fichier PrintStream Possède les méthodes print(), println() utilisées par System.out Karima Boudaoud IUT GTR-Sophia Antipolis 11 Package java.io Le package java.io fournit des classes permettant de manipuler diverses ressources fichiers mémoire tuyaux (pipes) filtres Karima Boudaoud IUT GTR-Sophia Antipolis 12

Les Fichiers java.io.file (1) les classes manipulant les fichiers se trouvent dans la classe java.io.file il existe trois classes principales FileInputStream FileOutputStream RandomAccessFile la classe java.io.file fournit de nombreuses méthodes pour gérer des fichiers et répertoires String getname() String getpath() String getabsolutepath() String getparent() boolean renameto(file newname) Karima Boudaoud IUT GTR-Sophia Antipolis 13 Karima Boudaoud IUT GTR-Sophia Antipolis 14 java.io.file (2) Droits d'accès boolean exists() boolean canwrite() boolean canread()... Autres informations long length() long lastmodified() boolean delete()... java.io.file (3)... File f = new File("toto.txt"); System.out.println("toto.txt : " + f.getname() + " " + f.getpath()); if (f.exists()) { System.out.println( "Fichier existe, droits = " + f.canread() + " " + f.canwrite() + " " + f.length());... }.. Karima Boudaoud IUT GTR-Sophia Antipolis 15 Karima Boudaoud IUT GTR-Sophia Antipolis 16

java.io.file (4) Répertoires boolean mkdir() String[] list() File f = new File("/u/I3S/buffa", ".emacs"); // ou bien File home = new File("/u/I3S/buffa"); File f = new File(home, ".emacs"); Package java.io (1) Mémoire BufferedInputStream BufferedOutputStream pour les lectures bufférisées DataInputStream DataOutputStream lectures typées utile pour lire des fichiers dont on connaît la nature exacte 3 doubles et un entier sur chaque ligne par exemple Karima Boudaoud IUT GTR-Sophia Antipolis 17 Karima Boudaoud IUT GTR-Sophia Antipolis 18 Package java.io (2) Tuyau PipedInputStream PipedOutputStream ces 2 classes permettent à deux threads d'échanger des données. Lecture filtrée StreamTokenizer java.io.inputstream (1) Caractéristiques la classe InputStream est une classe abstraite elle oblige les sous-classes à implémenter la méthode read Lecture d'octets uniqument c est la classe de base de tous les flots d'entrée Karima Boudaoud IUT GTR-Sophia Antipolis 19 Karima Boudaoud IUT GTR-Sophia Antipolis 20

java.io.inputstream (2) java.io.inputstream (3) Infos sur quelques sous-classes SequenceInputStream permet de travailler avec une énumération d'inputstreams comme s'il s'agissait d'un seul StringBufferInputStream lecture de chaînes de caractères ByteArrayInputStream lecture de tableaux d'octets FilterInputStream encapsule une instance d'inputstream et fournit des méthodes de filtrage Karima Boudaoud IUT GTR-Sophia Antipolis 21 Karima Boudaoud IUT GTR-Sophia Antipolis 22 java.io.fileinputstream (1) Lecture cette classe permet de lire des caractères ou des octets d un fichier Fermeture la fermeture d un fichier se fait par la méthode close Constructeurs public FileInputStream(String filename) public FileInputStream(File file) java.io.fileinputstream (2) Méthodes de lecture toutes les méthodes renvoient -1 en fin de fichier int read() lit un octet int read(byte[] taboctets) remplit taboctets si possible taboctets doit être alloué avant int read(byte[] taboctets,int offset,int nb) lit nb octets et les met dans taboctets à partir de l'indice offset. Karima Boudaoud IUT GTR-Sophia Antipolis 23 Karima Boudaoud IUT GTR-Sophia Antipolis 24

java.io.fileinputstream (3) java.io.datainputstream (1) FileInputStream fis; byte[] b = new byte[1024]; try {// ouverture du fichier fis = new FileInputStream("/u/I3S/buffa/.emacs"); } catch (FileNotFoundException e) {...} try {// lecture des données int i = fis.read(b); } catch (IOException e) {...} // utilisation des caractères lus String s = new String(b, 0); Lecture cette classe permet la lecture de données typées en terme de portabilité, un entier est de même taille partout Classe de "spécialisation" cette classe peut transformer en DataInputStream n'importe quel InputStream Constructeur public DataInputStream(InputStream) Karima Boudaoud IUT GTR-Sophia Antipolis 25 Karima Boudaoud IUT GTR-Sophia Antipolis 26 java.io.datainputstream (2) java.io.datainputstream (3) Méthodes de lecture byte readbyte() short readshort() char readchar() int readint() float readfloat() String readline... la fin de la ligne marquée par \n, \r, \r\n, EOF Fermeture de flot la méthode qui permet de fermer un flot est la méthode close la fermeture de entraine la fermeture de InputStream Karima Boudaoud IUT GTR-Sophia Antipolis 27 Karima Boudaoud IUT GTR-Sophia Antipolis 28

java.io.datainputstream (4) java.io.outputstream (1) // Ouverture d'un fichier FileInputStream fis; fis = new FileInputStream("ball.obj"); // spécialisation! DataInputStream dis = new DataInputStream(fis); String ligne = new String(); // lecture des données while((ligne = dis.readline())!= null){ System.out.println(ligne + "\n"); } dis.close(); // fermeture du fichier. Ferme aussi fis! la classe OutputStream est une classe abstraite elle est la de base de tous les flots de sortie Karima Boudaoud IUT GTR-Sophia Antipolis 29 Karima Boudaoud IUT GTR-Sophia Antipolis 30 java.io.outputstream (2) La classe PrintStream(OutputStream os) la classe PrintStream permet d écrire des données typées autres que des bytes la classe System.out est un PrintStream les méthodes fournies par cette classe sont close() flush() write() // permet l écriture d'octets ces méthodes sont implémentées par les sous-classes de OutputStream java.io.fileoutputstream (1) Écriture de caractères dans un fichier l ouverture du fichier est faite à la construction Le SecurityManager est appelée à chaque ouverture de fichier il existe des méthodes d'écriture d'octets. la fermeture est soit explicite avec close()ou implicite Constructeurs public FileOutputStream(File) public FileOutputStream(FileDescriptor) public FileOutputStream(String) Karima Boudaoud IUT GTR-Sophia Antipolis 31 Karima Boudaoud IUT GTR-Sophia Antipolis 32

java.io.fileoutputstream (2) Méthodes d écriture public void write(int) public void write(byte []) FileOutputStream fos = new FileOutputStream("toto"); String chaine = new String("Coucou c'est moi"); int longueur = chaine.length(); byte[] buffer = new byte[longueur]; chaine.getbytes(0, longueur - 1, buffer, 0); for(int i = 0; i < longueur; i++) fos.write(buffer[i]); java.io.bufferedoutputstream (1) Écriture l écriture se fait sur un flot de sortie bufférisé la spécialisation des données se fait à partir de n'importe quel flot de sortie. l écriture sur disque se fait de manière explicite par la méthode flush() ou la méthode close() Constructeurs BufferedInputStream(OutputStream) BufferedOutputStream(OutputStream,int size) Karima Boudaoud IUT GTR-Sophia Antipolis 33 Karima Boudaoud IUT GTR-Sophia Antipolis 34 java.io.bufferedoutputstream (2) Méthodes write(int) write(byte [], int offset, int length) flush() close() java.io.bufferedoutputstream (3) // ouverture d'un fichier pour écriture en mode bufférisé FileOutputStream fos = new FileOutputStream("toto.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos); // préparation des données à écrire String chaine = "coucou c'est moi"; int longueur = chaine.length(); byte[] buffer = new byte[longueur]; chaine.getbytes(0, longueur - 1, buffer, 0); // écriture for(int i = 0; i < longueur; i++) { bos.write(buffer[i]); } bos.write("\n"); bos.close(); Karima Boudaoud IUT GTR-Sophia Antipolis 35 Karima Boudaoud IUT GTR-Sophia Antipolis 36

java.io.dataoutputstream (1) Écriture cette classe permet l écriture de données typées en terme de portabilité, un entier est de même taille partout Classe de "spécialisation" cette classe permet de transformer en DataOutputStream n'importe quel OutputStream il est conseillé de prendre un BufferedOutputStream Constructeur public DataOutputStream(OutputStream) java.io.dataoutputstream (2) Méthodes d'écriture byte writebyte() short writeshort() char writechar() int writeint() float writefloat() writedouble() writebytes() writechars() writeutf() Karima Boudaoud IUT GTR-Sophia Antipolis 37 Karima Boudaoud IUT GTR-Sophia Antipolis 38 java.io.dataoutputstream (3) Fermeture de flot la fermeture se fait avec la méthode close() la fermeture de DataOutputStream entraine la fermeture de InputStream original java.io.dataoutputstream (4) FileOutputStream fos = new FileOutputStream("toto.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos); DataOutputStream dos = new DataOutputStream(bos); dos.writechars("position "); dos.writedouble(10.0); dos.writedouble(12.0); dos.writedouble(7.0); dos.writechars("\n");... Karima Boudaoud IUT GTR-Sophia Antipolis 39 Karima Boudaoud IUT GTR-Sophia Antipolis 40

Flots de caractères (1) Flots de caractères (2) les flots de caractères (character streams) ils existent depuis la JDK1.1 auparavant les entrées/sorties ne travaillaient qu'avec des bytes Il n y avait que les classes InputStream et OutputStream les flots de caractères manipulent des caractères au format unicode (16 bits) il y a 2 classes principales Reader et Writer Karima Boudaoud IUT GTR-Sophia Antipolis 41 Karima Boudaoud IUT GTR-Sophia Antipolis 42 Flots de caractères (3) Flots de caractères (4) les classes les plus utilisées sont InputStreamReader BufferedReader FileReader PrintWriter FileWriter Karima Boudaoud IUT GTR-Sophia Antipolis 43 Karima Boudaoud IUT GTR-Sophia Antipolis 44

Flots de caractères (5) Classes Reader et Writer les classes Reader et Writer permettent, globalement, de faire les mêmes opérations que les classes InputStream et OutputStream elles supportent des fonctionnalités similaires FileReader <--> FileInputStream FileWriter <--> FileOutputStream Flots de caractères (6) en utilisant les flots de caractères, on peut échanger des données textuelles avec des accents caractères bizarres (japonais )... InputStreamReader et OutputStreamWriter se chargent de l'encodage et du décodage ce sont toujours des octets qui circulent Karima Boudaoud IUT GTR-Sophia Antipolis 45 Karima Boudaoud IUT GTR-Sophia Antipolis 46 Flots de caractères (7) les flots de caractères sont plus efficaces que InputStream et OutputStream les classes InputStreamReader et OutputStreamWriter sont bufférisés en standard Complément sur les E/S Karima Boudaoud Karima Boudaoud IUT GTR-Sophia Antipolis 47

Package java.io.* java.io.file ByteArrayInputStream BufferedInputStream Cette classe fournie une définition plateform-independent des fichiers et des répertoires Object InputStream File FileDescriptor RandomAccessFile OutputStream StreamTokenizer FileInputStream FilterInputStream PipedInputStream SequenceInputStream StringBufferInputStream ByteArrayOutputStream FileOutputStream FilterOutputStream PipedOutputStream DataInputStream LineNumberInputStream PushbackInputStream BufferedOutputStream DataOutputStream PrintStream File f = new File("/etc/passwd"); System.out.println(f.exists()); // --> true System.out.println(f.canRead()); // --> true System.out.println(f.canWrite()); // --> false System.out.println(f.getLength()); // --> 11345 File d = new File("/etc/"); System.out.println(d.isDirectory()); // --> true String[] files = d.list(); for(int i=0; i < files.length; i++) System.out.println(files[i]); Karima Boudaoud IUT GTR-Sophia Antipolis 49 Karima Boudaoud IUT GTR-Sophia Antipolis 50 java.io.file(input Output) Stream Ces classes permettent d'accèder en lecture et en écriture à un fichier FileInputStream fis = new FileInputStream("source.txt"); byte[] data = new byte[fis.available()]; fis.read(data); fis.close(); FileOutputStream fos = new FileOutputStream("cible.txt"); fos.write(data); fos.close(); java.io.data(input Output) Stream Ces classes permettent de lire et d'écrire des types primitifs et des lignes sur des flux FileInputStream fis = new FileInputStream("source.txt"); DataInputStream dis = new DataInputStream(fis); int i = dis.readint(); double d = dis.readdouble(); String s = dis.readline(); FileOutputStream fos = new FileOutputStream("cible.txt"); DataOutputStream dos = new DataOutputStream(fos); dos.writeint(123); dos.writedouble(123.456); dos.writechars("une chaine"); Karima Boudaoud IUT GTR-Sophia Antipolis 51 Karima Boudaoud IUT GTR-Sophia Antipolis 52

java.io.printstream Cette classe permet de manipuler un OutputStream au travers des méthode print() et println( PrintStream ps = new PrintStream(new FileOutputStream("cible.txt")); ps.println("une ligne"); ps.println(123); ps.print("une autre "); ps.print("ligne"); ps.flush(); ps.close(); java.io.object Object(Input Output) Stream (1) Ces classes permettent de lire et d'ecrire des objets, implémentant java.io.serializable, sur des flux. // Ecriture FileOutputStream fos = new FileOutputStream("tmp"); ObjectOutput oos = new ObjectOutputStream(fos); oos.writeobject("today"); oos.writeobject(new Date()); oos.flush(); // Lecture FileInputStream fis = new FileInputStream("tmp"); ObjectInputStream ois = new ObjectInputStream(fis); String today = (String)ois.readObject(); Date date = (Date)ois.readObject(); Karima Boudaoud IUT GTR-Sophia Antipolis 53 Karima Boudaoud IUT GTR-Sophia Antipolis 54 java.io.object Object(Input Output) Stream (2) par défaut, tous les champs sont sérialisés (y compris private) cela peut poser des problèmes de sécurité il existe 3 solutions ne pas implémenter Serializable réécrire les méthodes writeobjet() et readobject() le mot clé transcient permet d'indiquer qu'un champs ne doit pas être serialisé Karima Boudaoud IUT GTR-Sophia Antipolis 55