Vous êtes sur la page 1sur 46

Université Cadi Ayyad

Ecole Supérieure de Téchnologie de Safi

Cours de la programmation orientée objet (JAVA)


Filière : Métiers Informatique

COURS : 3
Flux E/S ( Entrées-Sorties)

ENCADRÉ PAR

RÉALISÉ PAR
Mr. EL Abdellaoui Said EMAIL D’ENCADREUR
Guerroum Khawala
Elabdellaoui.said@yahoo.fr
Lbakali Hanane
Abid Saad
Kajji Hala
Année universitaire : 2020/2021
1
Plan
 Introduction

 Classe File

 Flux d’Octets

 Flux de caractères

 Sérialisation / Désérialisation

 Td
2
Introduction
 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 nature multiples : un fichier,


une socket réseau, un autre programme, etc ....
3

La classe File
La Classe File : Création d’ un Objet File 4

Les fichiers et les répertoires sont encapsulés dans la classe File du package java.io. Il
n'existe pas de classe pour traiter les répertoires car ils sont considérés comme des fichiers.
Une instance de la classe File est une représeantation logique d'un fichier ou d'un répertoire qui
peut ne pas exister physiquement sur le disque.

 La classe File permet de donner des informations sur un fichier ou un répertoire

 La création d’un objet de la classe File peut se faire de différentes manières :

 File f1=new File("c:/projet/fichier.ext");


 File f2=new File("c:/projet", "fihier.ext");
 File f3=new File("c:/projet");
La Classe File : Création d’ un Objet File 5

 Ligne numéro 9 va pas crée un fichier ou répertoire si le fichier ou le répertoire passer comme
paramètre n'existe pas.

 La ligne numéro 9 crée seulement un objet nommé f4 de type File qui représente logiquement un
fichier ou répertoire nommé «newfile.txt» qui n'existe pas physiquement sur le disque .
La Classe File : Les méthodes 6

 Si le fichier ou le répertoire existe, de nombreuses méthodes de la classe File permettent


d'obtenir des informations sur le fichier. Sinon plusieurs méthodes permettent de créer
des fichiers ou des répertoires.

 Voici une liste des principales méthodes :


La Classe File : Les méthodes 7

La Classe File : Les méthodes


La Classe File : Les méthodes Utilisées -- Exemple 1 8

 L’usage des méthodes - Exemple 1 :

import java.io.File;

public class Exemple1 {


public static void main(String[] args) {
File f1 = new File("D:\\Mes fichiers\\test.txt");
System.out.println("Exists"+ f1.exists());
System.out.println("isFile:"+ f1.isFile());
System.out.println("isDirectory"+ f1.isDirectory());
System.out.println("Path" +f1.getPath());
System.out.println("Absolute Path" +f1.getAbsolutePath());
System.out.println("Name" +f1.getName());
System.out.println("Can Read" +f1.canRead());
System.out.println("Can Write" +f1.canWrite());
}

}
La Classe File : Les méthodes Utilisées -- Exemple 1 9

 Affichage :
La Classe File : Les méthodes Utilisées -- Exemple 2 10

 L’usage des méthodes - Exemple 2 :

public class Exemple2 {


public static void main(String[] args)throws IOException {
File f1 = new File("D:\\Mes fichiers\\test2.txt");
System.out.println("Exists"+ f1.exists());
System.out.println("isFile:"+ f1.isFile());
System.out.println("isDirectory"+ f1.isDirectory());
System.out.println("Path" +f1.getPath());
System.out.println("Absolute Path" +f1.getAbsolutePath());
System.out.println("Name" +f1.getName());
System.out.println("Can Read" +f1.canRead());
System.out.println("Can Write" +f1.canWrite());
if(!f1.exists())
{
f1.createNewFile();
System.out.println("file Created");
}
}
La Classe File : Les méthodes Utilisées -- Exemple 2 11

 Affichage :
La Classe File : Les méthodes Utilisées -- Application 1 12

 Programme en java qui liste contenu d’un répertoire :

import java.io.*;

public class Q1 {
public static void main(String[] args) {

File f=new File("D:\\Mes fichiers");

String[] all=f.list();
for(int i=0; i<all.length; i++)
{
String temp = all[i];
System.out.println(temp);
}
}

}
La Classe File : Les méthodes Utilisées -- Application 2 13

 Afficher le contenu d’un répertoire en affichant si les éléments de ce répertoire sont des
fichier ou des répertoires.
 Dans le cas ou il s’agit d’un fichier afficher la capacité physique du fichier :
import java.io.*;
public class Q2 {
public static void main(String[] args) {
String rep="D:\\"; File f=new File(rep);
if(f.exists()){
String[] contenu=f.list();
for(int i=0;i<contenu.length;i++) {
File f2=new File(rep, contenu[i]);
if(f2.isDirectory())
System.out.println("REP:"+contenu[i]);
else
System.out.println("Fichier :"+contenu[i]+"Size:"+contenu[i].length());
}}
else{
System.out.println(rep+" n'existe pas");
}
}}
14

LES FLUX D'OCTETS

Les flux de ce type sont capables de traiter toutes les données. Les classes qui gèrent les flux d'octets héritent d'une des
deux classes abstraites InputStream ou OutputStream.
.
Les objets inputStream et OutputStream 15
Les classes file(Input/output) Stream 16

Java,io,InputStream Java,io,OutputStream

abstract void write() throws IOExeption


abstract int read() throws Int write(byte[ ] b) throws IOExeption
IOExeption Void close() throws IOExeption
Int read(byte[] b) throws Void flush() throws IOExeption
IOExeption
Void close() throws IOExeption

Java,io,FileInputStream Java,io,FileOutputStream

FileOutputStream(String
FileInputStream(String nomfichier)throws FileNoFoundExeption
nomfichier) throws FileOutStream(String nomFichier,booleon
FileNoFoundException append) throws FileNoFoundException
EXEMPLE 17

 Nous allons essayer de lire le contenu d’un fichier texte Fichier1.txt et on va le copier dans un autre fichier
Fichier2.txt.
 Ecrire un programme qui permet d’afficher le contenu d’un répertoire y compris le contenu de ses sous
répertoires. Le fichier "Fichier1.txt" contient le texte suivant: <<Java Avancée>>

import java.io.*; import java.io.*;


public class Solution { public class Afficher {
public static void(String[] args) ) throws IOException { public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream(f1); File f=new File("K:/Flux_E_S/");
FileOutputStream fos=new FileOutputStream(f2,true); File[] list=f.listFiles();
int i=fis.read(); for (int i = 0; i < list.length; i++) {
while(i!=-1) { if(list[i].isFile()) {
fos.write(i); System.out.println("est un fichier : "+list[i].getName());
i=fis.read(); }
} if(list[i].isDirectory()) {
fos.flush();fos.close();fis.close(); System.out.println("est un dossier :
System.out.println("avec succès"); "+list[i].getName());}}}}
}
Data(Input/Output)Stream 18

 Data(Input/Output)Stream offre la possibilité de lire directement des variables de types


primitifs(double, char, int, ect,) ainsi que les chaines de caractères (string) grâce a des
méthodes comme readdouble() , readInt(), etc,
Data(Input/Output)Stream 19

DataInputStream

import java.io.*;
public class exempleDataInput {
public static void(String[] args) {
File f= new File("K:/Flux_E_S/flux_E_S.txt");
InputStream fis;
try {fis= new FileInputStream(f);
DataInputStream data= new DataInputStream(fis);
byte[] t= new byte[fis.available()];
int i=data.read(t);
while(i>0) {
for (int j = 0; j < i; j++) {System.out.print((char)t[j]);
}
i=data.read(t); }
} catch (IOException e) {e.printStackTrace();
}}}
Data(Input/Output)Stream 2
0
DataOutputStream
import java.io.*;

public class ExempleDataOutput {

public static void main(String[] args) {


try {
FileOutputStream fot=new FileOutputStream(new
File("K:/Flux_E_S/flux_E_S.txt"),true);
DataOutputStream dout=new DataOutputStream(fot);
dout.write(108);
dout.writeBoolean(true);
dout.writeChar('K');
dout.flush();
dout.close();fot.close();
} catch (IOException e) {
e.printStackTrace();
}}
}
21

LES FLUX DE
CARACTÈRES
Les flux de caractères 22

 Ce type de flux a été ajouté à partir du JDK 1.1.

 Ils transportent des données sous forme de caractères avec le format Unicode qui code les caractères sur 2
octets.

 Les classes qui gèrent les flux de caractères héritent d'une des deux classes abstraites Reader ou Writer. Il existe
de nombreuses sous-classes pour traiter les flux de caractères.
Les flux de caractères 23

La hiérarchie des flux de caractères :


Les flux de caractères 24

La classe Reader :
C'est la classe abstraite mère de toutes les classes qui gèrent des flux de caractères en lecture.

Méthodes: Rôle:

boolean ready() Indique si le flux est prêt à être lu

close() ferme le flux et libère les ressources qui lui étaient associées

int read() renvoie le caractère lu ou -1 si la fin du flux est atteinte.

int read(char[]) lire plusieurs caractères et les mettre dans un tableau de caractères

int read(char[], int, int) lire plusieurs caractères. Elle attend en paramètre : un tableau de caractères qui contiendra les caractères lus,
l'indice du premier élément du tableau et le nombre de caractères à lire.
Les flux de caractères 25

La Classe Writer:

La classe Writer est la classe mère de toutes les classes qui gèrent des flux de caractères en écriture.

Méthodes: Rôle:

write(int) Ecrire le Caractère en paramétré dans le flux

write(char[]) écrire le tableau de caractères en paramètre dans le flux.

write(char[], int, int) écrire plusieurs caractères. Elle attend en paramètres : un tableau de caractères, l'indice du premier caractère et le
nombre de caractères à écrire.

write(String) écrire la chaîne de caractères en paramètre dans le flux

write(String, int, int) écrire une portion d'une chaîne de caractères. Elle attend en paramètre : une chaîne de caractères, l'indice du
premier caractère et le nombre de caractères à écrire.
Les flux de caractères 26

Les classes File (Reader/Writer)

 Les classes File(Reader/Writer) présentes dans le package java.io, servent à lire et écrire des données
dans un fichier texte.

 Les classes FileReader et FileWriter permettent de gérer des flux de caractères avec des fichiers.

 la classe FileReader hérite de la classe InputStreamReader et possède plusieurs constructeurs et plusieurs


méthodes .

 la classe FileWriter hérite de la classe OutputStreamWriter. Cette classe possède plusieurs constructeurs  et
plusieurs méthodes .
Les flux de caractères 2
7
FILE (READER/WRITER) : APPLICATION3

package snippet;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileReader_FileWriter {


public static void main(String []args) throws IOException{
//-------------creation-----------
File file =new File("C:\\Flux-ES\\Flux_ES.txt");
FileWriter fw= new FileWriter(file);
FileReader fr=new FileReader(file);
//---------------ECRITURE DANS LE FICHIER----
String str=" Bonjour a tous !";
fw.write(str);
fw.close();
//---------------LECTURE DE FICHIER-------
int i=0; str=" ";
while((i=fr.read())!=-1){
str +=(char)i;
}
System.out.println(str);
fr.close();
}
}
Les flux de caractères 28

Les classes BufferedReader/BufferedWriter

Les classes BufferedReader et BufferedWriter permettent lire et écrire un fichier texte ligne par ligne au lieu de caractère
par caractère.

BufferedWriter :

Méthode Rôle

flush() vide le tampon en écrivant les données dans le flux.

newLine() écrit un séparateur de ligne dans le flux

BufferedReader :

readLine() qui permet de lire une ligne de caractères dans le flux.


Les flux de caractères 29

Exemple: BufferedReader et BufferedWriter

import java.io.*;
public class Example3 {
public static void main(String []args){
try {
File f1 = new File ("C:\\Flux-ES\\Flux_ES2.txt");
FileReader fr = new FileReader(f1);
FileWriter fw= new FileWriter(f1);
BufferedReader br= new BufferedReader(fr);
BufferedWriter bw= new BufferedWriter(fw);
String s= "Bonjour a tous";
bw.write(s);
bw.flush();
bw.close();
String str1;
while ((str1=br.readLine())!=null){
System.out.println(str1);
}

fr.close();

}catch(IOException e){} }
}
Les flux de caractères 30

Les classes InputStreamReader/OutputStreamWriter

 Les classes InputStreamReader/OutputStreamWriter  établissent un pont entre les flux d'octets et les flux
de caractères.

 La classe InputStreamReader permet de lire des octets et les traduit en caractères en utilisant un décodage
spécifique.

 Pour La classe OutputStreamWriter , les caractères sont écrits dans le flux sous forme d'un suite d'octets
en utilisant un encodage.
Les flux de caractères 31

STREAM(READER/WRITER) : EXAMPLE2

import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Example5 {
public static void main(String[] args) throws IOException {
try{
File file = new File("C:\\Flux-ES\\Flux_ES3.txt");
InputStreamReader rd = new InputStreamReader (new FileInputStream(file));
OutputStreamWriter wrt = new OutputStreamWriter (new FileOutputStream(file));
//Ecriture
String z ="Bonjour";
wrt.write(z);
wrt.flush();
wrt.close();
//lecture
int i =rd.read();
while(i!=-1) {
System.out.print((char)i);
i= rd.read();
}
}catch(IOException e){}
32

Sérialisation / Désérialisation
33
Introduction
 C’est
. quoi la sérialisation ?

• La sérialisation est un procédé qui permet de rendre un objet persistant pour


stockage ou échange et vice versa.
• Cet objet est mis sous une forme sous laquelle il pourra être reconstitué à
l'identique.
• Il pourra être stocké sur un disque dur ou transmis au travers d'un réseau
pour le créer dans une autre JVM.

 Pourquoi faire de la sérialisation ?

• Stocker des objets momentanément inutilisés.


• Echanger des objets entre plusieurs JVM.
Sérialisation / Désérialisation 34
Sérialisation / Désérialisation 35

 Quelques contrainte de la sérialisation :

 Pour pouvoir être sérialisée, une classe doit implémenter l'interface java.io.Serializable.

 L’interface « Serializable » n’a pas de méthode à redéfinir, on l’appelle une interface marqueur.

 Si une superclasse implémente cet interface toutes ses classes dérivées seront considérés comme
sérialisables.

 La classe ObjectOutputStream qui permet de sérialiser un objet.

 La classe ObjectInputStream qui permet de désérialiser un objet précédemment sérialisé.


Sérialisation / Désérialisation 36

Voiture
o marque
o modèle
o vitesse
Sérialisation / Désérialisation 37

 Atelier sur la sérialisation & désérialisation

 Créer 3 objet de la classe Voiture.

 Les sérialiser dans un fichier « voitures.ser »

 Désérialiser les 3 objet a partir du fichier « voitures.ser ».

 Ajouter un nouveau attribut a la classe et le rendre non sérialisable.


Sérialisation / Désérialisation 38

Atelier sur la sérialisation & désérialisation

voiture1 voiture2 voiture3


o BMW o Ford o Audi Création de 3 objet de la
o 2010 o 2008 o 2016 classe Voiture.
o 220.0 o 200.0 o 240.0

Sérialisation

Les sérialiser dans un


fichier « voitures.ser ».

voitures.ser
Sérialisation / Désérialisation 39
Sérialisation / Désérialisation 40

Atelier sur la sérialisation & désérialisation

voitures.ser

Désérialisation Reconstituer les trois


objets précédemment
sérialisé a partir du
fichier « voitures.ser ».

voiture1 voiture2 voiture3


o BMW o Ford o Audi
o 2010 o 2008 o 2016
o 220.0 o 200.0 o 240.0
Sérialisation / Désérialisation 41
Sérialisation / Désérialisation 42
Sérialisation / Désérialisation 43

Classe1
o Private int champSecret champSecre
Flux d’octetst
file.ser
Sérialisation / Désérialisation 44

Voiture
o marque
o modèle
o vitesse
o champSecret
45

Td

Vous aimerez peut-être aussi