0% ont trouvé ce document utile (0 vote)
48 vues33 pages

Chapitre Entrees Sorties

cour java

Transféré par

hamdizayen5
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
48 vues33 pages

Chapitre Entrees Sorties

cour java

Transféré par

hamdizayen5
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

1

Chapitre

Les entrées sorties


Entrées Sorties
2

 Un programme a souvent besoin d'échanger des informations, que ce soit


pour recevoir des données d'une source ou pour envoyer des données vers un
destinataire.
 La source et la destination de ces échanges peuvent être de natures
multiples : un fichier, une socket réseau, un autre programme, etc ...
 De la même façon, la nature des données échangées peut être diverse : du
texte, des images, du son, etc ...
Notion des flux
3

 Les flux (streams en anglais) permettent d'encapsuler ces processus d'envoi et


de réception de données. Les flux traitent toujours les données de façon
séquentielle.
 En Java, les flux peuvent être divisés en plusieurs catégories :
 les flux d'entrée (input stream) et les flux de sortie (output stream)
 les flux de traitement de caractères et les flux de traitement d'octets
 Java définit des flux pour lire ou écrire des données mais aussi des classes qui
permettent de faire des traitements sur les données du flux. Ces classes doivent
être associées à un flux de lecture ou d'écriture et sont considérées comme des
filtres. Par exemple, il existe des filtres qui permettent de mettre les données
traitées dans un tampon (buffer) pour les traiter par lots.
 Toutes ces classes sont regroupées dans le package java.io.
Flux d’octets et Flux de caractères (1)
4
 Les flux sont décomposés en deux grandes familles
 Flux d’octets
 classes abstraites InputStream et OutputStream et leurs sous-
classes concrètes respectives
 Flux de caractères
 classes abstraites Reader et Writer et leurs sous-classes
concrètes respectives

Flux d'octets Flux de caractères


Flux d'entrée InputStream Reader
Flux de sortie OutputStream Writer
Flux d’octets et Flux de caractères (2)
5

 les sous-classes de Reader sont des types de flux en lecture sur des ensembles
de caractères
 les sous-classes de Writer sont des types de flux en écriture sur des ensembles
de caractères
 les sous-classes de InputStream sont des types de flux en lecture sur des
ensembles d'octets
 les sous-classes de OutputStream sont des types de flux en écriture sur des
ensembles d'octets
Flux d’octets et Flux de caractères (3)
6

Pour le préfixe, il faut distinguer les flux et les filtres. Pour les flux, le
préfixe contient la source ou la destination selon le sens du flux.
Flux d’octets et Flux de caractères (4)
7

Pour les filtres, le préfixe contient le type de traitement qu'il effectue. Les filtres
n'existent pas obligatoirement pour des flux en entrée et en sortie.
Flux d’octets et Flux de caractères (5)
8
La package java.io définit ainsi plusieurs classes :
Flux en lecture Flux en sortie
BufferedReader BufferedWriter
CharArrayReader CharArrayWriter
FileReader FileWriter
Flux de caractères InputStreamReader OutputStreamWriter
LineNumberReader
PipedReader PipedWriter
PushbackReader
StringReader StringWriter
BufferedInputStream BufferedOutputStream
ByteArrayInputStream ByteArrayOutputStream
DataInputStream DataOuputStream
Flux d’octets FileInputStream FileOutputStream
ObjectInputStream ObjetOutputStream
PipedInputStream PipedOutputStream
PushbackInputStream PrintStream
SequenceInputStream
Flux d’octets et Flux de caractères (6)
9
Les flux de caractères
10

 Ce sont des sous-classes de Reader et Writer


 Ces flux utilisent le codage de caractères Unicode
 Exemples
 conversion des caractères saisis au clavier en caractères dans le codage par
défaut

InputStreamReader in = new InputStreamReader (System.in);

Conversion des caractères d’un fichier avec un codage explicitement indiqué

InputStreamReader in = new InputStreamReader (


new FileInputStream ("chinois.txt"), "ISO2022CN");
Gestion des fichiers (1)
11

 La gestion de fichiers proprement dite se fait par l'intermédiaire de la


classe File
 Cette classe possède des méthodes qui permettent d'interroger ou d'agir
sur le système de gestion de fichiers du système d'exploitation
 Un objet de type classe File peut représenter un fichier ou un répertoire
Gestion des fichiers (2)
12

 Voici un aperçu de quelques constructeurs et méthodes de la classe File :


 File (String name)

 File (String path, String name)

 File (File dir, String name)

 boolean isFile( ) / boolean isDirectory( )

 boolean mkdir( )

 boolean exists( )

 boolean delete( )

 boolean canWrite( ) / boolean canRead( )

 File getParentFile( )

 long lastModified( )
Gestion des fichiers (2)
13
Gestion des fichiers (2)
14
Gestion des fichiers (3)
15
import java.io.*; Les objets et classes relatifs à
public class Listeur la gestion des fichiers se
{ trouvent dans le package
java.io
public static void main(String[] args)
{ A partir du chemin d'un dossier ou
Listeur.litrep(new File(".")); d'un fichier, on peut créer un objet
} File : ici on va lister le répertoire
public static void litrep(File rep) courant (« . »)
{
if (rep.isDirectory()) Les méthodes isFile() et
{ //liste les fichiers du répertoire isDirectory() permettent de
déterminer si mon objet File est
String[] t=rep.list();
une fichier ou un répertoire
for (int i=0;i<t.length;i++)
System.out.println(t[i]);
}
}
}
Gestion des fichiers (3)
16

import java.io.*;
public class Listeur
{
Le nom complet du fichier
public static void main(String[] args) est rep\fichier
{ litrep(new File( "c:\\"));}

public static void litrep(File rep)


{ Pour chaque
File r2; fichier,
on regarde s'il est
if (rep.isDirectory())
un répertoire.
{String t[]=rep.list();
for (int i=0;i<t.length;i++)
{ Si le fichier est un
r2=new File(rep.getAbsolutePath()+"\\"+t[i]); répertoire
if (r2.isDirectory()) litrep(r2); litrep s'appelle
else System.out.println(r2.getAbsolutePath()); récursivement
}}
}}
17

Exemples
FileInputStream et FileOutputStream (1)
18

 C'est par le biais des objets FileInputStream et FileOutputStream que nous allons
pouvoir :
 lire un fichier d’octets;
 écrire dans un fichier d’octets.
 Ces classes héritent des classes abstraites InputStream et OutputStream, présentes
dans le package java.io.
FileInputStream et FileOutputStream (2)
19
FileInputStream et FileOutputStream (3)
20
FileInputStream et FileOutputStream (4)
21
BufferedInputStream et BuffreredOutputStream (1)
22

 BufferedInputStream enveloppe à son intérieur un objet InputStream, qui lit


automatiquement les données de l'origine (un fichier, par exemple) et les
stocke dans buffer (la mémoire tampon) de BufferedInputStream.
 BufferedInputStream remplace les méthodes qui héritent de sa classe
parentale, comme read(), read(byte []),... pour s'assurer qu'elles manipuleront
les données de la buffer plutôt que de l'origine (un fichier, par exemple).
BufferedInputStream et BuffreredOutputStream (1)
23
BufferedInputStream et BuffreredOutputStream (2)
24
BufferedInputStream et BuffreredOutputStream (3)
25
BufferedInputStream et BuffreredOutputStream (4)
26
ObjectInputStream et ObjectOutputStream (1)
27

 Vous devez savoir que lorsqu'on


veut écrire des objets dans des
fichiers, on appelle ça
la « sérialisation » : c'est le nom
que porte l'action de sauvegarder
des objets !
ObjectInputStream et ObjectOutputStream (2)
28
ObjectInputStream et ObjectOutputStream (3)
29
ObjectInputStream et ObjectOutputStream (4)
30
 Ce qu'il se passe est simple : les données de vos objets sont enregistrées dans le
fichier. Mais que se passerait-il si notre objet Game avait un autre objet de votre
composition en son sein de cette classe.
ObjectInputStream et ObjectOutputStream (5)
31
ObjectInputStream et ObjectOutputStream (5)
32

 L’objet Notice n'est pas sérialisable, une erreur est donc levée. Maintenant,
deux choix s'offrent à vous :
 soit vous faites en sorte de rendre votre objet sérialisable ;
 soit vous spécifiez dans votre classe Game que la variable notice n'a pas
à être sérialisée.
 Pour la première option, c'est simple, il suffit d'implémenter l'interface
sérialisable dans notre classe Notice. Pour la seconde, il suffit de déclarer
votre variable : transient ;
ObjectInputStream et ObjectOutputStream (6)
33

Vous aimerez peut-être aussi