Jusqu’à maintenant, nos programmes sont isolés et n'interagissent pas avec d'autres composants (fichiers, programme, etc.). Dans ce chapitre, nous verrons comment donner un autre pouvoir à nos programmes : manipuler des fichiers.
Lisez des fichiers
En Java, il peut parfois être utile de lire le contenu d’un fichier pour récupérer des données. Qu’il s’agisse d’un fichier que nous avons déjà sauvegardé ou d’un autre fichier, il est possible de le lire, ligne par ligne. Voyons ça avec un exemple :
public class Main1 {
public static void main(String[] args) {
try {
// Création d'un fileReader pour lire le fichier
FileReader fileReader = new FileReader("/path/to/the/file");
// Création d'un bufferedReader qui utilise le fileReader
BufferedReader reader = new BufferedReader(fileReader);
// une fonction à essayer pouvant générer une erreur
String line = reader.readLine();
while (line != null) {
// affichage de la ligne
System.out.println(line);
// lecture de la prochaine ligne
line = reader.readLine();
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ici, nous ne faisons qu’afficher chaque ligne de notre fichier, mais intéressons-nous aux différents objets de notre code :
Le try catch qui nous permet de gérer les exceptions.
Un FileReader qui va lire le fichier au chemin qui lui est donné en argument.
Un BufferedReader qui va utiliser le fileReader pour lire le fichier ligne par ligne.
Une condition while qui nous permet de répéter le code tant que nous ne sommes pas à la fin du fichier.
Écrivez dans des fichiers
Nous venons de voir comment lire un fichier, maintenant voyons comment écrire dans un fichier. Il peut être intéressant pour nos programmes Java de pouvoir écrire dans un fichier pour plusieurs raisons, comme par exemple pour traiter des fichiers de données (XML, CSV, etc.). Il est courant d’utiliser un programme informatique pour traiter ou modifier de gros volumes de données, et Java peut tout à fait s’en occuper 💪.
Notre programme pourrait aussi créer et écrire dans un fichier uniquement destiné à être lu plus tard, ce qui revient à sauvegarder l’état du programme. Prenons un exemple pour enregistrer les paramètres d’un programme Java :
public class Main2 {
public static void main(String[] args) {
try {
// Création d'un fileWriter pour écrire dans un fichier
FileWriter fileWriter = new FileWriter("/path/to/the/file", false);
// Création d'un bufferedWriter qui utilise le fileWriter
BufferedWriter writer = new BufferedWriter(fileWriter);
// ajout d'un texte à notre fichier
writer.write("preferenceNewsletter=false");
// Retour à la ligne
writer.newLine();
writer.write("preferenceColor=#425384");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Dans notre exemple, on enregistre les textes "preferenceNewsletter=false"
et "preferenceColor=#425384"
dans notre fichier. On utilise la méthode newLine
du BufferedWriter
pour changer de ligne entre les 2 textes.
Pour écrire notre texte, nous avons donc dû utiliser plusieurs objets qui fonctionnent ensemble :
le “try catch” qui nous permet de gérer les exceptions ;
un “FileWriter” qui va préparer le fichier au chemin qui lui est donné en argument ;
un “BufferedWriter” qui va utiliser le “fileWrite” pour écrire dans le fichier.
En résumé
La lecture du contenu des fichiers se fait grâce à un ”BufferedReader“ qui va lire le fichier ligne par ligne.
L’écriture de texte dans un fichier se fait avec un “BufferedWriter“.
Lorsqu’on manipule des fichiers, il faut toujours gérer les exceptions car les fichiers sont des éléments extérieurs à notre programme, et les problèmes d’accès ou de droits sont fréquents.