Les entrées sorties en java
Utilisation de la notion de flux
Accès séquentielle à des objets en lecture
ou en écriture
Indépendant du type d'entrées-sorties:
fichiers, buffers, pipes,
sockets, etc
1
Les flux en entrées
C'est un canal de communication entre
une source et un programme «lecteur »
2
Les flux de sorties
Un flux de sortie représente un canal de
communication entre un programme
«écrivain » et un destinataire
3
Les catégories de flux
Les flux par octets: codage direct des données
byte à byte
Les flux caractères: formats textuels (un
caractère est codé sur 2 bytes (format unicode)
4
Les modes d'accès : principe
Ecrire/lire c'est faire transiter des flux d'octets ou
de caractères dans des tuyaux
2 tailles de tuyaux: les tuyaux pour un octet, les
tuyaux pour un caractère
Octets: les flux finissent en outputStream ou
inputStream (ex: FileInputStream)
Caractères: les flux finissent en Reader ou
Writer (ex: FileReader, BufferedWriter)
Flux d'octets ou de caractères
5
Les types de flux
Deux sens de fonctionnement
En lecture ("aspiration"):
xxxInputStream, xxxReader
En écriture ("envoi"):
xxxOutputStream, xxxWriter
6
Les types de flux
Différents types de tuyaux:
Les tuyaux qui se trouvent près des
éléments d'entrée/sortie (File, Socket,
Pipe, String, etc.)
Les tuyaux de haut niveau qui
implémentent des services
(BufferedReader, FilterOutputStream,
ObjectInputStream, DataOutputStream...)
Les tuyaux de conversion:
InputStreamReader (o -> c),
OutputStreamWriter (c -> o)…`
7
Les classes flux d'octets
En entrée
8
Les classes flux d'octets
En sortie
9
Les classes flux de caractères
En entrée
10
Les classes flux de caractères
En sortie
11
exemple
Copie de fichier (méthode non efficace)
public class Copy
{
public static void main(String[] args) throws IOException
{
File inputFile = new File("fichier_entree.txt");
File outputFile = new File("fichier_sortie.txt");
FileReader in = new FileReader(inputFile);
FileWriter out = new FileWriter(outputFile);
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
}
}
12
Exemple (2)
Copie de fichier
(méthode avec un tampon)
public class Copy
{
public static void main(String[] args) throws IOException
{
File inputFile = new File("fichier entree.txt");
File outputFile = new File("fichier sortie.txt");
FileReader in = new BufferedR eader(new FileReader(inputFile));
FileWriter out = new FileWriter(outputFile);
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
}
}
13
Exemple (3)
Utilisation des dataOutputStream
DataOutputStream out = new DataOutputStream(new
FileOutputStream("facture.txt"));
double[] prices = { 19.99,
9.99, 15.99, 3.99, 4.99 };
int[] units =
{ 12,
8,
13,
29,
50 };
String[] descs = {
"Java T-shirt",
"Java Mug",
"Duke Juggling Dolls",
"Java Pin",
"Java Key Chain" };
for (int i = 0; i < prices.length; i ++)
{
out.writeDouble(prices[i]);
out.writeChar('\t');
out.writeInt(units[i]);
out.writeChar('\t');
out.writeChars(descs[i]);
out.writeChar('\n');
}
out.close();
14
La classe Scanner
Paquetage java.util
Lecture de tout type simple de données
Entier, caractère, réel,...
Lecture d'une ligne à la fois
Test de présence dans le flux du type
présumé hasInt()
Test de présence de données dans le flux
hasNext()
15
Les flux standards
static PrintStream out
Static inputStream in
Static PrintStream err
Accessible à partir de la classe System
qui est non instanciable
16