1.11 Ecriture et lecture dans un fichier
Méthodologie pour écrire dans un fichier :
- on utilise le package
FileWriter, qu’il faut importer - on instancie un nouveau FileWriter
fwen lui donnant le chemin vers le fichier en paramètre - on écrit dans le fichier
- on ferme le FileWriter à la fin de l’écriture
import java.io.FileWriter;
FileWriter fw = new FileWriter('.\cheminVersFichier\fichier.txt');
fw.write(...);
fw.close();On peut indiquer le chemin relatif avec
.\qui part de la racine de l’espace de travail (working directory ou workspace).
Méthodologie pour lire dans un fichier :
- on utilise le package
FileInputStream, qu’il faut importer - on instancie un nouveau FileInputStream
fien lui donnant le chemin vers le fichier en paramètre - on utilise le package
Scanner, qu’il faut également importer- on instancie un nouveau Scanner
scanen lui donnant le FileInputStreamfien paramètre - on lit les lignes une à une tant qu’il en reste avec une boucle
while,scan.hasNextLine()etnextLine() - on ferme le Scanner à la fin des saisies
- on instancie un nouveau Scanner
- on ferme le FileInputStream à la fin de la lecture
import java.io.FileInputStream;
import java.util.Scanner;
FileInputStream fi = new FileInputStream('.\cheminVersFichier\fichier.txt');
Scanner scan = new Scanner(fi);
while(scan.hasNextLine()) {
System.out.println(scan.nextLine());
}
scan.close();
fi.close();Sauf que FileWriter et FileInputStream sont des méthodes qui lèvent obligatoirement des exceptions !! Il faut les entourer de try...catch :
import java.util.Scanner;
import java.io.FileWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.channels.FileLockInterruptionException;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Ecriture {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter('.\Documents\tot.txt');
fw.write("Hello world \n");
for(int i=0;i<1000;i++) {
fw.write(Integer.toString(i) + "\n");
}
} catch (IOException e) {
System.out.println('Impossible d\'écrire dans le fichier');
} finally {
try {
fw.close();
} catch (IOException e) {
System.out.println('Problème de fermeture');
}
}
}
}
public class Lecture {
public static void main(String[] args) {
Scanner scan = null;
FileInputStream fichier = null;
try {
fichier = new FileInputStream('.\Documents\tot.txt');
scan = new Scanner(fichier);
while(scan.hasNextLine()) {
System.out.println(scan.nextLine());
}
} catch (FileNotFoundException e) {
System.out.println('Lecture impossible');
} finally {
scan.close();
try {
fichier.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println('Fermeture impossible');
}
}
}
}Portée des variables : lorsqu’on ajoute le traitement des exceptions (
try...catch), on déclare les variables en dehors pour y avoir accès.
Alternative : déclarer les FileWriter, FileInputStream et Scanner dans le
try:try(FileWriter f = new FileWriter('./valeurs.txt') {...}