POO Chapt 5
POO Chapt 5
POO Chapt 5
Flux (Stream)
• La notion de flux (Stream) caractérise un chemin (une voie) de
communication entre une source d'information et sa
destination.
• L'accès aux informations s'effectue de manière séquentielle.
• Les librairies Java distinguent deux genres de flux :
• Les flux binaires (Byte Stream) qui peuvent représenter des données
quelconques (nombres, données structurées, programmes, sons,
images, …)
• Les flux de caractères (Character Stream) qui représentent des textes
(chaînes de caractères) au format Unicode.
4
Lecture au clavier
• La lecture au clavier s'effectue en imbriquant (en enrobant) le flux
standard (System.in) dans deux constructeurs de classes qui se
chargeront de la conversion des octets en caractères Unicode et
de la mise en place d'une mémoire tampon intermédiaire.
• Lecture au clavier :
BufferedReader keyboard = new BufferedReader( new
InputStreamReader(System.in));
...
String s = keyboard.readLine();
• Remarques : La méthode readLine() attend jusqu'à ce que
l'utilisateur introduise des caractères au clavier et termine la
saisie en pressant sur la touche Return (Enter). Le caractère fin
de ligne n'est pas inclus dans le String retourné. Si l'utilisateur
presse uniquement sur Return, le String sera vide (longueur = 0).
12
Lecture au clavier
• Une autre manière de faire (souvent plus pratique) est d'utiliser la
classe Scanner (java.util) qui permet également de saisir mais, en
plus, de transformer et d'interpréter ce qui a été saisi au clavier.
• Exemple d'utilisation :
Scanner scan = new Scanner(System.in);
System.out.print("Enter an integer (or 'x' to exit) : ");
while (scan.hasNextInt()) {
int i = scan.nextInt();
System.out.println("Value = " + i);
System.out.print("Enter an integer (or 'x' to exit) : ");
}
• Remarques : La classe Scanner offre de nombreuses possibilités
pour décomposer et interpréter les informations lues. Pour plus de
détail il faut consulter la documentation (API).
13
Classe Scanner
19
Classe StringTokenizer
21
import java.util.StringTokenizer; import java.io.*;
public class Pg2 {
Utilisation de StringTokenizer
public static void main(String [] args) {
String l, w, filename;
StringTokenizer st;
BufferedReader f, keyboard;
try {
keyboard = new BufferedReader(new
InputStreamReader(System.in));
System.out.print("Entrer le nom du fichier : ");
filename = keyboard.readLine();
f = new BufferedReader(new FileReader(filename));
l = f.readLine();
while (l != null) {
st = new StringTokenizer(l);
while (st.hasMoreTokens()) {
System.out.print("(" + st.nextToken() + ")");
}
System.out.println();
l = f.readLine();}
f.close(); }
catch (IOException e) { System.err.println("Erreur: " + e);
}}}
22
Méthode split()
• Pour décomposer une chaîne de caractères, il existe
également la méthode split() qui se trouve dans la classe
String.
• Pour le découpage de la chaîne, cette méthode se base sur
une expression régulière dont la syntaxe est définie dans la
classe Pattern (java.util.regex).
String str = "Mots, séparés, par, des, virgules";
String[] words = str.split(", ");
for (int i=0; i<words.length; i++) {
System.out.println(words[i]);
}
23
p2 = Float.parseFloat(args[1]);
p3 = Double.parseDouble(args[2]);
p4 = Boolean.valueOf(args[3]).booleanValue();
}
catch (Exception e) {
System.err.println("Incorrect Runtime Parameters Types or
Values");
System.err.println("Should be : int, float, double, boolean");
return;
}
...
}
}