Les fichiers Master WISD AU: 2020/2021 En java, les entrées/sorties (fichiers e
Les fichiers Master WISD AU: 2020/2021 En java, les entrées/sorties (fichiers en particulier) sont représentés par des objets particuliers appelés flots (Stream en anglais). Le principe de traitement est simple et se résume comme suit : Ouverture d'un canal de communication. Écriture ou lecture des données. Fermeture du canal. Entrées: Fichier, clavier, modem, capteur, … Sorties: Fichier, écran, imprimante, … Fichiers en java A.Y. - WISD 2 11/10/2021 Fichiers en java Il existe de nombreuses sortes de stream (flot), qui peuvent être classés selon plusieurs critères (package java.io): Les streams d’entrées (lecture) et les streams de sortie (écriture). Les streams de caractères (texte) et les streams de données binaires. Les streams de traitement des données et les streams de communication de données. Les streams à accès séquentiel et les streams à accès direct. Les streams avec et sans tampon de données. A.Y. - WISD 3 11/10/2021 Classes de gestion des fichiers InputStream OutputStream Reader Writer StreamTokenizer File 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 A.Y. - WISD 4 11/10/2021 Les flots de données binaires (ou flots d’octets) peuvent contenir d’autre type de données que des caractères (des int par exemple). En java, les streams de données binaires dérivent des deux classes (du package java.io): InputStream pour les entrées et OutputStream pour les sorties. Un flot peut être : Soit une source d’octets à partir de laquelle il est possible de lire de l'information. → flot d'entrée. Soit une destination d’octets dans laquelle il est possible d'écrire de l'information. → flot de sortie. Fichiers binaires A.Y. - WISD 5 11/10/2021 Fichiers binaires A.Y. - WISD 6 11/10/2021 Ecriture dans un fichier binaires L’écriture dans un fichier binaire se fait grâce aux streams d’écriture pour les données binaires. En java, les streams d’écriture pour les données binaires sont des sous classes de la classe java.io.OutputStream. DataOutputStream: écriture séquentielle dans un fichier binaire. BufferedOuputStream: écriture des données à l’aide d’un tampon. PrintStream: écriture de données avec conversion en octets. ZipOutputStream: permet d'écrire des fichiers dans le format de compression zip. ObjectOutputStream: écrire des objets dans un flux binaire (sérialisation). A.Y. - WISD 7 11/10/2021 class CreerFichierBinaire { public static void main(String [] arg) throws IOException { FileOutputStream fos= new FileOutputStream("fichier.dat"); DataOutputStream stream= new DataOutputStream(fos); stream.writeUTF("Bonjour monde java"); stream.writeInt(100); stream.writeFloat(123,456); stream.writeBoolean(true); System.out.println(stream.size()); stream.close(); } } Exemple A.Y. - WISD 8 11/10/2021 La lecture d’un fichier de données binaires se fait par des flux d’entrées pour les données binaires. Les streams d’entrées pour les données binaires sont des sous classes de la classe java.io.InputStream. DataInputStream: lecture séquentielle dans un fichier binaire. BufferedInputStream: lecture de données à l’aide d’un tampon. ZipInputStream: lire des fichiers dans le format de compression zip. ObjectInputStream: lire des objets dans un stream binaire (désérialiser un objet précédemment sérialisé) Lecture d’un fichier binaires A.Y. - WISD 9 11/10/2021 Exemple class LectureFichierBinaire { public static void main(String [] arg) throws IOException { DataInputStream stream; stream= new DataInputStream(new FileInputStream ("fichier.dat")); //Supposons que fichier.dat se trouve à la racine du projet. System.out.println("La taille du fichier est: "+stream.available()+" octets"); System.out.println(stream.readUTF()); System.out.println(stream.readInt()); System.out.println(stream.readFloat()); System.out.println(stream.readBoolean()); stream.close(); } } A.Y. - WISD 10 11/10/2021 Fichiers textes Les flots (streams) de caractères sont conçus pour la lecture et l’écriture de texte. Les flots de caractères dérivent des deux classes abstraites: Reader pour les entrées et Writer pour les sorties. A.Y. - WISD 11 11/10/2021 Fichiers textes A.Y. - WISD 12 11/10/2021 Ecriture dans un fichier texte Pour écrire dans un fichier texte, il faut utiliser les streams d’écriture qui sont des sous-classes de la classe Writer, qui contient les méthodes abstraites suivantes: write(char[] t, int id, int n), qui permet d’écrire n caractères à partir du tableau t, en commençant à l’indice id. write(String, int, int): écrire une portion d'une chaîne de caractères. close(), qui ferme le stream. … Toutes les classes dérivées de Writer redéfinissent donc obligatoirement ces méthodes. A.Y. - WISD 13 11/10/2021 FileWriter: sous classe particulière de OutputStreamWriter utilisant la taille du tampon par défaut. Cette classe convient dans la plupart des cas d’écrire dans un fichier de caractères. OutputStreamWriter: permet la conversion d’un stream d’octets (de données binaires) en un stream de caractères. BufferedWriter: écriture de caractères à l’aide d’un tampon. PrintWriter: permet d’écrire des caractères. Elle est particulièrement utilisée pour l’affichage en mode texte. La méthode println() de la classe PrintWriter permet d’écrire sur le fichier texte. Cette méthode est surchargée et peut avoir un argument de type String, char, int, … Ecriture dans un fichier texte A.Y. - WISD 14 11/10/2021 Exemple class CreerFichierTexte { public static void main(String [] arg) throws IOException { PrintWriter ecrire; ecrire= new PrintWriter (new FileOutputStream("fichier.txt")); ecrire.println("Bonjour"); ecrire.println(100); ecrire.println(true); ecrire.println(10.55); ecrire.close(); } } A.Y. - WISD 15 11/10/2021 Lecture d’un fichier texte Pour lire dans un fichier texte, on doit utiliser des sous classes de la classe abstraite Reader. Quelques méthodes de cette classe: read(): renvoie le caractère lu ou -1 si la fin du flux est atteinte. read(char []t, int id, int n): permet de lire n caractères et de les placer dans le tableau t, à partir de l’indice id. close(): ferme le stream. A.Y. - WISD 16 11/10/2021 FileReader: sous classe particulière de InputStreamReader utilisant une taille de tampon par défaut. Cette classe convient dans la plupart des cas de lecture d’un fichier de caractères. BufferedReader: lecture de caractères à l’aide d’un tampon. Les caractères peuvent ainsi être lus en bloc. Lecture d’un fichier texte A.Y. - WISD 17 11/10/2021 BufferedReader stream=null; String str; try{ stream=new BufferedReader(new FileReader("fichier.txt")); while((str=stream.readLine())!=null) // retourne null si rien a lire System.out.println(str); } catch(FileNotFoundException exc){ System.out.println("Erreur d'ouverture du fichier!!"); } finally{ stream.close(); } Exemple 1 A.Y. - WISD 18 11/10/2021 Exemple 2 FileReader fiche=new FileReader("fichier.txt"); BufferedReader flux=new BufferedReader(ficALire); int car = flux.read(); //lecture du 1er caractère while (car != -1) { //-1 si fin du fichier System.out.print((char) car); car = flux.read(); } flux.close(); fiche.close(); } A.Y. - WISD 19 while (flux.ready()) { car = flux.read(); System.out.print((char) car); } 11/10/2021 Exemple 3 FileWriter ecrire; char tmp[]={'u','n','e',' ','c','h','a','i','n','e',' ','d','e',' ','c','a','r','a','c','t','è','r','e','s'}; ecrire= new FileWriter ("fichier.txt"); ecrire.write(tmp); ecrire.write(tmp,5,8); ecrire.close(); A.Y. - WISD 20 11/10/2021 Exemple 4 FileReader lire; char tmp[]=new char[1024]; int nbcar; lire= new FileReader ("fichier.txt"); nbcar=lire.read(tmp); for(int i=0;i<nbcar;i++) System.out.print(tmp[i]); lire.close(); A.Y. - WISD 21 11/10/2021 Cette classe donne une représentation objet d'un fichier ou d'un répertoire. Ses méthodes donnent beaucoup d’informations sur les fichiers (la taille, date de modification, fichier ou répertoire, …). Constructeurs: File(String ch): ch est le chemin d’accès File(String ch, String nom): ch est le chemin complet d’accès, nom est le nom du fichier. Classe File A.Y. - WISD 22 11/10/2021 Quelques méthodes: canRead(): renvoie true si le fichier est accessible en lecture canWrite(): renvoie true si le fichier est accessible en écriture isDirectory(): retourne true si le chemin indiqué existe isFile(): renvoie true si le fichier indiqué existe list(): retourne le contenu d’un répertoire. length(): la taille d’un fichier lastModified(): renvoie la date et l’heure de la dernière modification renameTo(File): renomme un fichier ou un répertoire getParent(): retourne le nom du répertoire parent. Classe File A.Y. - WISD 23 11/10/2021 Classe File Autres méthodes de cette classe : boolean delete() boolean exists() boolean mkdir() boolean mkdirs() String getName( ) boolean isHidden() boolean setLastModified() A.Y. - WISD 24 11/10/2021 Classe File Création de fichiers en utilisant la classe File File file = new File (CheminDuFichier); Création de FileReader avec un objet File FileReader fichier = new FileReader(file); Création de FileWriter: FileWriter fichier = new FileWriter(file); A.Y. - WISD 25 11/10/2021 Exemple String nomFichier; File repertoire=new File("."); if(repertoire.isDirectory()){ String [] tab=repertoire.list(); for(int i=0;i<tab.length;i++){ nomFichier=tab[i]; File fiche=new File(nomFichier); if(fiche.isFile()){ Date dt=new Date(fiche.lastModified()); long taille=fiche.length(); System.out.println(nomFichier+ "\t "+ taille+ "\t"+dt); } } } A.Y. - WISD 26 11/10/2021 La classe StreamTokenizer permet de découper un flux en entrée en unités syntaxiques telles que des mots et des nombres. Attributs de cette classe: double nval: valeur d’une unité numérique String sval: chaîne contenant les caractères d’un mot int ttype: contient le type de l’unité syntaxique lue. int TT_EOF: constante indiquant de la fin du flux est atteinte int TT_EOL: constante indiquant de la fin d’une ligne est atteinte int TT_NUMBER: constante indiquant qu’un nombre a été lu int TT_WORD: constante indiquant qu’un mot a été lu Classe StreamTokenizer A.Y. - WISD 27 11/10/2021 StreamTokenizer Quelques méthodes: StreamTokenizer(Reader) StreamTokenizer(InputStream) int lineno(): renvoie le numéro de la ligne en cours nextToken(): recherche l’unité suivante ordinaryChars(int): le caractère passé en paramètre devient un caractère ordinaire. A.Y. - WISD 28 11/10/2021 Exemple FileReader fiche=new FileReader ("fichier.txt"); StreamTokenizer lire=new StreamTokenizer(fiche); while(lire.nextToken()!=StreamTokenizer.TT_EOF){ if(lire.ttype==StreamTokenizer.TT_WORD) System.out.print(lire.sval); } fiche.close(); A.Y. - WISD 29 11/10/2021 La classe RandomAccessFile permet d’accéder à un fichier en mode écriture et lecture à la fois, comme elle permet de se déplacer dans un fichier avec la méthode seek. La classe RandomAccessFile admet les constructeurs: RandomAccessFile(File fichier, String mode) RandomAccessFile(String nom, String mode) Classe RandomAccessFile A.Y. - WISD 30 11/10/2021 Quelques méthodes de la classe RandomAccessFile: int readInt(), float readFloat(), char readChar(), uploads/Litterature/ pres-java-fichier-2021.pdf
Documents similaires
-
11
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mai 09, 2021
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.4046MB