Sujets abordés et exemples - semaine 13 Remerciements à Marie
Transcription
Sujets abordés et exemples - semaine 13 Remerciements à Marie
Sujets abordés et exemples - semaine 13 Remerciements à Marie-Soleil L’Allier et Éric Bélanger pour ces notes et les exemples. Streams Toutes les d’entrées sorties en Java sont basées sur la notion de streams. Un stream représente un flot de données (un canal de communication) avec un lecteur (reader) à une extrémité et un écrivain (writer) à l’autre. Les streams en Java sont unidirectionnels, c’est à dire que l’information n’y circule que dans un sens. Pour effectuer une communication bidirectionnel, il faudra alors utiliser un stream d’entrée et un stream de sortie. Read() InputStream Write() OutputStream Types de streams Lorsque vous travaillez avec le package java.io, différents types de streams sont disponibles : InputStream/OutputStream Lecture et écriture d’une séquence non-structurée de bytes (8 bits). Ces streams représentent la base de tous les autres types. Reader/Writer Lecture et écriture d’une suite de caractères. Supporte Unicode où les caractères sont représentés sur 2 bytes (16 bits). FileReader/FileWriter Implantation des streams Reader et Writer pour lire et écrire dans des fichiers locaux du système. //création d’un stream pour lire un fichier //si le fichier n’existe pas, une exception est levée FileReader fr = new FileReader ( "NomFichier.txt" ); //création d’un //si le fichier //si le fichier FileWriter fw = stream pour écrire dans le fichier n’existe pas il le crée existe, il écrase son contenu new FileWriter ( "NomFichier.txt" ) //si le fichier n’existe pas il le crée //si le fichier existe, il positionne le curseur à la fin du fichier FileWriter fw = new FileWriter ( "NomFichier.txt", true ) BufferedReader/BufferedWriter Lecture et écriture d’une suite de caractères, mais avec l’utilisation d’une mémoire tampon pour amélioration des performances. L’utilisation d’une mémoire tampon permet de réduire le nombre d’accès physiques effectués lors de l’appel des méthodes read() et write(). //création d’un streamBuffer pour lire dans le fichier BufferedReader fListeCours = new BufferedReader ( new FileReader ( "NomFichier.txt" ) ); //lecture d’une ligne dans le fichier String lignelue = fListeCours.readLine(); PrintWriter Écriture d’une suite de caractères, optimisée pour faciliter l’impression de texte. PrintWriter fListeFiltree = new PrintWriter ( new FileWriter ( "NomFichier.txt" ) ); //écriture d’une ligne dans le fichier fListeFiltree.println("INF1120"); Exceptions Les classes utilisées pour traiter les lectures et écritures dans un fichier génèrent des exceptions d’entrées sorties. Par conséquent, il faut absolument gérer ces erreurs. La clause suivante doit donc être spécifiée à la fin de la méthode qui accède le fichier : public static void main(String[] args) throws IOException { ... } import java.io.PrintWriter; import java.io.IOException; import java.io.FileWriter; /** * Exemple de programme pour lire et écrire dans un fichier. * * @author marie-soleil */ public class ProgrammeEntreeSortieFichier { public static void main(String[] args) throws IOException { //ouverture d'un fichier pour lire la liste de cours BufferedReader fListeCours = new BufferedReader ( new FileReader ( "ListeCours.txt" ) ); //ouverture d'un fichier pour lire la liste de profs BufferedReader fListeProfs = new BufferedReader ( new FileReader ( "ListeProfs.txt" ) ); //ouverture d'un fichier pour écrire la liste cours-prof PrintWriter fFusion = new PrintWriter ( new FileWriter ( "FusionCoursProfs.txt" ) ); //lire la 1ere ligne de chaque fichier String cours = fListeCours.readLine(); String prof = fListeProfs.readLine(); //tant qu'un cours et un prof est lu while ((cours != null) && (prof != null)) { //concaténer le cours et le prof et l'ajouter dans le //fichier fusionné fFusion.println(cours + " - " + prof); //lire la prochaine ligne dans les fichiers cours = fListeCours.readLine(); prof = fListeProfs.readLine(); } //fermer les fichiers fListeCours.close(); fListeProfs.close(); fFusion.close(); } } Exécution: INF1120 INF2120 INF3120 INF5151 INF5153 - Stephane Lévesque Normand Séguin Marc Lemieux Halia Ferrat Stephane Lévesque /** * I N F 1 1 2 0 * * Cette classe montre comment lire et écrire dans un fichier * * @author Éric Bélanger * @version 15-11-2005 */ import java.io.*; import java.util.StringTokenizer; public class Fichiers { // Autres méthodes s'il y a lieu public static double calcul (double param1, double param2, double param3) { return param1 * param2 / param3; } public static void main (String[] params) { try { FileInputStream in = new FileInputStream ("C:\\fichiers1120\\parametres.txt"); byte [] buffer = new byte[255]; int read; while((read = in.read(buffer)) != -1) { String out = new String(buffer, 0, read); System.out.println(out); } System.out.println(); in.close(); } catch (Exception e) {} try { FileInputStream input = new FileInputStream ("C:\\fichiers1120\\parametres.txt"); FileOutputStream output = new FileOutputStream ("C:\\fichiers1120\\parametres2.txt"); byte [] buffer = new byte[1]; int read; while((read = input.read(buffer)) != -1) { if ((char)buffer[0] != ';'){ String out = new String(buffer, 0, read); System.out.print(out); output.write(buffer); } } input.close(); output.close(); } catch (Exception e) {} try { BufferedReader brListeCours = new BufferedReader (new FileReader ("C:\\fichiers1120\\ListeCours.txt")); BufferedReader brListeProfs = new BufferedReader (new FileReader ("C:\\fichiers1120\\ListeProfs.txt")); PrintWriter pwFusionCoursProfs = new PrintWriter (new FileWriter ("C:\\fichiers1120\\FusionCoursProfs.txt")); String cours = brListeCours.readLine(); String prof = brListeProfs.readLine(); while ((cours != null) && (prof != null)){ pwFusionCoursProfs.println(cours + " - " + prof); cours = brListeCours.readLine(); prof = brListeProfs.readLine(); } brListeCours.close(); brListeProfs.close(); pwFusionCoursProfs.close(); } catch (Exception e) {} try { BufferedReader brLeBuffer = new BufferedReader (new FileReader ("C:\\fichiers1120\\parametres.txt")); FileWriter fwFichierSortie = new FileWriter("C:\\fichiers1120\\resultatCalcul.txt"); String ligne; while ((ligne = brLeBuffer.readLine()) != null) { StringTokenizer stLigne = new StringTokenizer (ligne, ";"); double parametre1 = Double.parseDouble(stLigne.nextToken()); double parametre2 = Double.parseDouble(stLigne.nextToken()); double parametre3 = Double.parseDouble(stLigne.nextToken()); fwFichierSortie.write("" + calcul(parametre1, parametre2, parametre3) + "\n"); } brLeBuffer.close(); fwFichierSortie.close(); } catch (Exception e) {} try { String ligne; FileReader frEntree = new FileReader ("C:\\fichiers1120\\fichierACopier.txt"); BufferedReader entree = new BufferedReader (frEntree); FileWriter fwSortie = new FileWriter ("C:\\fichiers1120\\copieDuFichier.txt"); PrintWriter sortie = new PrintWriter (fwSortie); ligne = entree.readLine(); while ( ligne != null ) { sortie.println (ligne); ligne = entree.readLine(); } entree.close(); sortie.close(); } catch (Exception e) {} } // main } // Fichiers