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