Le paquet des entrées/sorties en Rajae El Ouazzani 2014-2015 Le paquet des E/S
Le paquet des entrées/sorties en Rajae El Ouazzani 2014-2015 Le paquet des E/S 2014-2015 2 Présentation [1] Une entrée/sortie consiste en un échange de données entre le programme et une autre source, par exemple la mémoire, un fichier, le programme lui-même. Java emploie ce qu'on appelle un stream (flux). Celui-ci joue le rôle de médiateur entre la source des données et sa destination. 2014-2015 3 Source de données: fichier 1 Destination de données: fichier 2 Stream/Flux Suite Toute opération sur les E/S doit suivre le schéma suivant: ouverture du flux E/S, opération de lecture/écriture, fermeture du flux E/S. Java décompose les objets traitants des flux en deux catégories: les objets travaillant avec des flux d'entrée (in), pour la lecture du flux; les objets travaillant avec des flux de sortie (out), pour l'écriture de flux. 2014-2015 4 Source de données: fichier 1 Destination de données: fichier 2 Flux de lecture: in Flux d’écriture: out Plan Section 1: La classe File Section 2: Les flux d’octets Les classes File(Input/Output)Stream Les classes Data(Input/Output)Stream Section 3: Les flux de caractères Les classes File(Writer/Reader) Les classes (Input/Output)Stream(Reader/Writer) Les classes Buffered(Reader/Writer) Section 4: La sérialisation Les classes Object(Input/Output)Stream 2014-2015 5 Section 1: La classe File 2014-2015 6 La classe File [1] La classe File encapsule les fonctionnalités de gestion de fichier: Suppression, renommage, date de la dernière modification, etc. 2014-2015 7 Méthodes utilisées 8 Méthodes Rôles boolean createNewFile() Création d’un nouveau fichier vide, et renvoie vrai si le nouveau fichier n’existait pas avant sa création. boolean exists() Renvoie vrai si et seulement si le fichier existe. String getName() Retourne le nom du fichier. boolean isFile() Retourne vrai s’il s’agit d’un fichier et faux sinon. String getPath() Retourne le chemin du fichier. String getAbsolutePath() Retourne le chemin absolu int compareTo(File pathname) Comparaison des 2 chemins boolean renameTo(File dest) Renomme un fichier. retourne false si le file dest existe déjà, et le renommage n'est pas effectué. 9 Méthodes Rôles boolean canRead() Renvoie vrai si le fichier peut être lu, et faux sinon. boolean setReadOnly() Marque le fichier en lecture seule. boolean canWrite() Renvoie vrai si le fichier peut être écrit, et faux sinon. boolean canExecute() Renvoie vrai si le fichier peut être exécuté, et faux sinon. boolean isHidden() •Retourne true si le fichier est caché. Sous Windows le fichier est marqué "caché". •Sous Unix le nom du fichier commence par un point. long lastModified() Retourne la date de la dernière modification sous format de long. Date d = new Date(f .lastModified()) ; boolean delete() Supprime le fichier void deleteOnExit() Supprime le fichier à la fin de l’exécution de la machine virtuelle. long length() La longueur du fichier, en octets. 2014-2015 10 Méthodes Rôles static File[] listRoots() Liste les lecteurs. Un pour chaque lecteur sous Windows (X:) et "/" sous Unix. String[] list() Renvoie la liste des fichiers contenus dans le répertoire sous forme d’un tableau de chaînes. File[] listFiles() Retourne la liste des fichiers contenus dans le répertoire sous forme d’un tableau de fichiers boolean mkdir() Crée un répertoire. boolean mkdirs() Crée un répertoire, et tous ses parents nécessaires. L'appel de mkdir avec un File constitué de "\\" retourne false. Exemple: "D:/CoursJava/PaquetES" boolean isDirectory() Retourne vrai s’il s’agit d’un répertoire et faux sinon. Chemin absolu Vs chemin relatif [6, 7] Un chemin absolu part de la racine / Un chemin relatif part de l'endroit ou l'on se trouve. Exemple 1: si je me trouve sur /home/Mohammed, le chemin absolu vers mon bureau est : /home/Mohammed/Bureau, le chemin relatif est ./Bureau (ou Bureau plus simplement). Exemple 2: chemin d’accès à un site web: Chemins absolus est: http://www.adobe.com/support/dreamweaver/contents.html Chemins relatifs au document: dreamweaver/contents.html). 11 Exemple On va créer un fichier test.txt. On va le mettre dans l’emplacement suivant: D:\Mes documents\test.txt On va mettre le texte suivant dans le fichier: On va utiliser quelques unes des méthodes présentées précédemment. 2014-2015 12 Cours de la programmation orienté objet en java. Pour les étudiants de la LP en informatique. Bon courage à tous. import java.io.File; // pour utiliser l'objet File public class Exemple { public static void main(String[] args) { //Création de l'objet File. Créer physiquement "test.txt" File f = new File("E://Mes documents//test.txt"); System.out.println("Chemin absolu du fichier : " + f.getAbsolutePath()); //D:\Mes documents/test.txt System.out.println("Nom du fichier : " + f.getName()); //test.txt System.out.println("Est-ce qu'il existe ? " + f.exists()); // true System.out.println("Est-ce un fichier ? " + f.isFile()); // true System.out.println("Est-ce un répertoire ? " + f.isDirectory()); //fasle 2014-2015 13 System.out.println("Affichage des lecteurs à la racine du PC:"); for(File lecteur: File.listRoots()) { //c’est une méthode static System.out.println(lecteur.getAbsolutePath()); try { //On parcourt la liste des fichiers et répertoires for(File fichier : lecteur.listFiles()) //S'il s'agit d'un dossier, on ajoute un "/" System.out.print(((fichier.isDirectory()) ? fichier.getName()+"/" : fichier.getName())); } catch (NullPointerException e) { //L'instruction peut générer une NullPointerException s'il n'y a pas de sous-fichier ! } } } } 2014-2015 14 Section 2: Les flux d’octets 2014-2015 15 Les flux d'octets [2] Les classes abstraites InputStream et OutputStream implémentent les types de flux d'entrée (in) et de sortie (out) dans lesquelles il est possible de lire ou d'écrire une suite d'octets. 2014-2015 16 Les objets InputStream et OutputStream [3] 2014-2015 17 Les classes File(Input/Output) Stream 2014-2015 18 Les classes File(Input/Output) Stream [2] 2014-2015 19 Explication La classe InputStream possède une méthode read qui lit un octet et renvoie cet octet ou bien -1 si la fin de la source de données a été atteinte. Le concepteur d'une classe concrète pour un flux d'entrée va surcharger cette méthode pour plus de fonctionnalités. 2014-2015 20 Suite La classe OutputStream définit une méthode abstraite write pour écrire un octet vers une destination. A l'issue d'une opération d'écriture ou de lecture dans un flux, il faut le fermer en appelant la méthode close. 2014-2015 21 Remarques Si une application ouvre de nombreux flux sans prendre soin de les fermer, elle peut épuiser les ressources du système. La fermeture d'un flux de sortie a aussi pour effet de vider le tampon utilisé par le flux de sortie. Tous les caractères se trouvant en transit dans un tampon sont émis. Si vous ne fermez pas un fichier, le dernier paquet d'octets risque de ne jamais partir. Il est possible de forcer un vidage avec la méthode flush(). 2014-2015 22 Exemple Nous allons essayer de lire le contenu d’un fichier texte Fichier1.txt et on va le copier dans un autre fichier Fichier2.txt. Le fichier "Fichier1.txt" contient le texte suivant: Cours de JAva. 2014-2015 23 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; // on peut utiliser le package java.io.* public class CopierFichier { public static void main(String[] args) { //FileNotFoundException traite le cas où test1.txt n'existe pas //IOException traite le cas où il y'a une erreur lors des méthodes read / write try{ File f1= new File("Fichier1.txt"); FileInputStream fis= new FileInputStream(f1); // on doit créer physiquement "test1.txt“ File f2= new File("Fichier2.txt"); FileOutputStream fos= new FileOutputStream(f2); 2014-2015 24 int n = 0; /* On affecte le résultat de la lecture à la variable n. Quand c'est fini n vaut -1 */ //Tant que il y’a des valeurs dans Fichier1.txt, on boucle. while ((n = fis.read()) != -1) { fos.write(n); // On écrit dans Fichier2.txt // On l’affiche au format char et en code décimal System.out.println(n + "(" + (char) n + ")"); } System.out.println("Copie terminée !"); // fermeture des 2 flux if (fis != null) fis.close(); if (fos != null) fos.close(); } // fermeture de try catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // fermeture de main } // fermeture de la classe 2014-2015 25 Exécution Si le fichier "Fichier1.txt" contient le texte suivant: Cours de JAva. Alors, le programme affiche le résultat suivant: 26 67(C) 111(o) 117(u) 114(r) 115(s) 32( ) 100(d) 101(e) 32( ) 74(J) 65(A) 118(v) 97(a) 46(.) 13( ) 10( ) Copie terminée ! Cela exprime un retour à la ligne Les classes Data(Input/Output)Stream 2014-2015 27 Les objets InputStream et OutputStream [3] Les classes Data(Input/Output)Stream dérivent des 2 classes abstraites Filter(Input/Output)Stream. 4 classes filles dérivent de Filter(Input/Output)Stream. 2014-2015 28 Les classes Data(Input/Output)Stream Les classes qui dérivent de Filter(Input/Output)Stream sont: Data(Input/Output)Stream: offre la possibilité de lire directement des variables de types primitifs (double, char, int, etc.)ainsi que les chaines de caractères (String) grâce à des méthodes comme readDouble(), readInt(), etc. Buffered(Input/Output)Stream: cette classe permet d'avoir un tampon à disposition dans la lecture/écriture du flux. En gros, les données vont tout d'abord remplir le tampon, et dès que celui-ci est plein, le programme accède aux données. PushbackInputStream: permet de remettre un octet ou caractère déjà lu dans le flux entrant. LineNumber(Input/Output)Stream: cette classe offre la possibilité de récupérer le numéro de la ligne lue à un instant T. 29 Hiérarchie des classes Ces 4 classes prennent en paramètre une instance dérivant des classes Input/OutputStream. Exemple: File f= new File("test.txt"); FileInputStream fis = new FileInputStream(f); BufferedInputStream bis= new BufferedInputStream(fis); DataInputStream dis = new DataInputStream(bis); //Ou en condensé : DataInputStream dis = new DataInputStream( new BufferedInputStream( new FileInputStream( new File("test.txt")))); 30 Les méthodes des classes Data(Input/Output)Stream Les classes uploads/Litterature/ chap-6-le-paquet-des-entrees-sorties.pdf
Documents similaires










-
21
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 25, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.7939MB