Java : les fichiers
Achref El Mouelhi
Docteur de l’université d’Aix-Marseille
Chercheur en Programmation par contrainte (IA)
Ingénieur en Génie logiciel
[email protected]
H & H: Research and Training 1 / 17
Plan
1 Introduction
2 Écriture
3 Lecture
H & H: Research and Training 2 / 17
Introduction
Les fichiers
Les fichiers
outil utilisé pour stocker et/ou échanger les données
I c
Pouvant être en écriture ou en lecture
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 3 / 17
Introduction
Les fichiers
Les fichiers
outil utilisé pour stocker et/ou échanger les données
I c
Pouvant être en écriture ou en lecture
ELH
U
L MO
f E
re de fichiers en Java
h
3 étapes pour la manipulation
c
couAouverture
Création
Utilisation : écriture ou lecture
Fermeture
H & H: Research and Training 3 / 17
Écriture
Les fichiers
Deux étapes pour la création d’un fichier en Java
Création logique (déclaration d’un objet)
I c
ELH
Création physique (création sur le disque) ou ouverture si existant
U
L MO
f E
chre
c A
H & H: Research and Training 4 / 17
Écriture
Les fichiers
Deux étapes pour la création d’un fichier en Java
Création logique (déclaration d’un objet)
I c
ELH
Création physique (création sur le disque) ou ouverture si existant
U
L MO
f E
A c
Création logique hre
c
= new File("fichier.txt");
File file
Tous les imports de ce chapitre sont de java.io.*;
H & H: Research and Training 4 / 17
Écriture
Les fichiers
Pour créer le fichier physiquement, il faut préciser le type d’utilisation
lecture, ou
écriture
I c
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 5 / 17
Écriture
Les fichiers
Pour créer le fichier physiquement, il faut préciser le type d’utilisation
lecture, ou
écriture
I c
ELH
U
L MO
f E
Création physique d’un fichier pour écriture
chre
c A
FileWriter fw = new FileWriter(file);
Remarque
Exécuter le projet puis aller vérifier la présence d’un fichier
fichier.txt dans le projet (Rafraichir le projet si le fichier n’apparaı̂t
pas)
H & H: Research and Training 5 / 17
Écriture
Les fichiers
On peut fusionner les deux étapes précédentes
FileWriter fw = new FileWriter("fichier.txt");
I c
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 6 / 17
Écriture
Les fichiers
On peut fusionner les deux étapes précédentes
FileWriter fw = new FileWriter("fichier.txt");
I
c
Remarque
EL H
U
Oètre booléen qui prend la
On peut aussi ajouter un deuxième param
L M
valeur
h r e fE
A
true : écrire àcla suite si le fichier existe
c
false (par défaut) : écraser le contenu précédent si le fichier
existe
H & H: Research and Training 6 / 17
Écriture
Les fichiers
On peut fusionner les deux étapes précédentes
FileWriter fw = new FileWriter("fichier.txt");
I
c
Remarque
EL H
U
Oètre booléen qui prend la
On peut aussi ajouter un deuxième param
L M
valeur
h r e fE
A
true : écrire àcla suite si le fichier existe
c
false (par défaut) : écraser le contenu précédent si le fichier
existe
Exemple
FileWriter fw = new FileWriter("fichier.txt",true);
H & H: Research and Training 6 / 17
Écriture
Les fichiers
Pour écrire dans un fichier
// pour écrire une chaı̂ne de caractère
fw.write("Hello world");
// pour écrire un entier
I c
fw.write(86);
ELH
U
L
// pour écrire un caractèreMO
fw.write(’a’);
h r e fE
A c
c
fw.close();
// fermer le flux
H & H: Research and Training 7 / 17
Écriture
Les fichiers
Pour écrire dans un fichier
// pour écrire une chaı̂ne de caractère
fw.write("Hello world");
// pour écrire un entier
I c
fw.write(86);
ELH
U
L
// pour écrire un caractèreMO
fw.write(’a’);
h r e fE
A c
c
fw.close();
// fermer le flux
Allons vérifier ce qui a été écrit
Hello worldVa
H & H: Research and Training 7 / 17
Écriture
Les fichiers
Pour écrire dans un fichier
// pour écrire une chaı̂ne de caractère
fw.write("Hello world");
// pour écrire un entier
I c
fw.write(86);
ELH
U
L
// pour écrire un caractèreMO
fw.write(’a’);
h r e fE
A c
c
fw.close();
// fermer le flux
Allons vérifier ce qui a été écrit
Hello worldVa
H & H: Research and Training 7 / 17
Écriture
Les fichiers
Pour écrire à la ligne (mais ce n’est pas pratique)
fw.write("Hello world\n");
fw.write(’a’);
I c
fw.close();
ELH
U
MO
// fermer le flux
f E L
chre
c A
H & H: Research and Training 8 / 17
Écriture
Les fichiers
Pour écrire à la ligne (mais ce n’est pas pratique)
fw.write("Hello world\n");
fw.write(’a’);
I c
fw.close();
ELH
U
MO
// fermer le flux
f E L
chre
Contenu du fichierc A
Hello world
a
H & H: Research and Training 8 / 17
Écriture
Les fichiers
On peut aussi utiliser un objet de la classe BufferedWriter
BufferedWriter bw = new BufferedWriter(fw);
I c
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 9 / 17
Écriture
Les fichiers
On peut aussi utiliser un objet de la classe BufferedWriter
BufferedWriter bw = new BufferedWriter(fw);
I c
ELH
Pour écrire U
L MO
bw.write("Hello world");
f E
bw.newLine();
chre
bw.write(87);
bw.newLine(); c A
bw.write(’a’);
bw.close();
// fermer le flux
H & H: Research and Training 9 / 17
Écriture
Les fichiers
BufferedWriter vs FileWriter
I
c
H
ELcaractère par
U
FileWriter écrit directement dans le fichier
caractère
L MO
r
BufferedWriter écrite E un buffer puis envoie tout dans le
f dans
A
fichier quand on h
cappelle la méthode flush ou close
c
H & H: Research and Training 10 / 17
Lecture
Les fichiers
Création physique d’un fichier pour lecture
I c
FileReader fr = new FileReader(file);
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 11 / 17
Lecture
Les fichiers
Création physique d’un fichier pour lecture
I c
FileReader fr = new FileReader(file);
ELH
U
L MO
f E
reles deux étapes de création
h
On peut aussi fusionner
c
FileReaderc frA= new FileReader("fichier.txt");
H & H: Research and Training 11 / 17
Lecture
Les fichiers
Pour lire un caractère d’un fichier
int str = fr.read();
I c
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 12 / 17
Lecture
Les fichiers
Pour lire un caractère d’un fichier
int str = fr.read();
I c
Affichons ce qu’on a lu ELH
U
System.out.println(str);
L MO
f E
hre
// affiche le code ASCII du caractère lu
c
c A
H & H: Research and Training 12 / 17
Lecture
Les fichiers
Pour lire un caractère d’un fichier
int str = fr.read();
I c
Affichons ce qu’on a lu ELH
U
System.out.println(str);
L MO
f E
hre
// affiche le code ASCII du caractère lu
c
c A
Pour afficher le caractère associé au code ASCII lu
System.out.println((char)str);
// affiche le caractère lu
H & H: Research and Training 12 / 17
Lecture
Les fichiers
Pour lire et afficher tout le contenu du fichier
int str = fr.read();
while (str != -1) {
System.out.println((char)str);
I c
// affiche tous les caractères lus
ELH
U
MO
str = fr.read();
}
f E L
chre
c A
H & H: Research and Training 13 / 17
Lecture
Les fichiers
Pour lire et afficher tout le contenu du fichier
int str = fr.read();
while (str != -1) {
System.out.println((char)str);
I c
// affiche tous les caractères lus
ELH
U
MO
str = fr.read();
}
f E L
A c hre
c
Ou en plus simple
while ((str = fr.read()) != -1)
System.out.println(str);
// affiche tous les caractères lus
H & H: Research and Training 13 / 17
Lecture
Les fichiers
Remarque
Pour que l’on puisse lire le fichier ligne par ligne, il faut utiliser un autre
objet : BufferedReader
I c
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 14 / 17
Lecture
Les fichiers
Remarque
Pour que l’on puisse lire le fichier ligne par ligne, il faut utiliser un autre
objet : BufferedReader
I c
EL H
U
Pour instancier BufferedReaderMO
f E L = new BufferedReader(
c h re
BufferedReader bufferedReader
c A
fr);
H & H: Research and Training 14 / 17
Lecture
Les fichiers
Remarque
Pour que l’on puisse lire le fichier ligne par ligne, il faut utiliser un autre
objet : BufferedReader
I c
EL H
U
Pour instancier BufferedReaderMO
f E L = new BufferedReader(
c h re
BufferedReader bufferedReader
c A
fr);
Pour lire et afficher une ligne
String string = bufferedReader.readLine();
System.out.println(string);
H & H: Research and Training 14 / 17
Lecture
Les fichiers
Pour lire et afficher toutes les lignes
String string = bufferedReader.readLine();
while (string != null) {
System.out.println(string); I c
string = bufferedReader.readLine(); ELH
U
}
L MO
f E
chre
c A
H & H: Research and Training 15 / 17
Lecture
Les fichiers
Pour lire et afficher toutes les lignes
String string = bufferedReader.readLine();
while (string != null) {
System.out.println(string); I c
string = bufferedReader.readLine(); ELH
U
}
L MO
f E
chre
Ou en plus simple c A
String string ;
while ((string = bufferedReader.readLine()) != null)
System.out.println(string);
H & H: Research and Training 15 / 17
Lecture
Les fichiers
c
On peut toujours lire caractère par caractère
I
int i = bufferedReader.read();
ELH
System.out.println(i); O U
// affiche le code ASCIIL M
r e fE
System.out.println((char)i);
h
A
// affiche le c
caractère lu
c
H & H: Research and Training 16 / 17
Lecture
Les fichiers
I
c
Remarque
EL H
Quel que soit l’objet de lecture et/ouM
U
O utilisé, il faut penser à le
écriture
fermer après utilisation.
fE L
c h r e
c A
H & H: Research and Training 17 / 17