Page 3
Lire un fichier avec Scanner
Rien de plus simple que de lire un fichier avec la classe Scanner, cette classe propose toute une
série de constructeurs pour construire un objet Scanner à partir d'un objet File, d'un objet
InputStream, ...
Une fois l'objet Scanner construit, on peut utiliser toutes les méthodes de cette classe qui sont
extrêmement riches, rappelez-vous. Imaginons par exemple que l'on aie un fichier qui contienne
des noms de personnes avec leur année de naissance comme ceci :
Sébastien 1984
Cédric 1985
John 1976
Avec l'objet Scanner, on va pouvoir lire le fichier de manière très précise et par exemple afficher
l'âge de chacune des personnes présente dans le fichier.
Exemple d’écriture dans un fichier texte.
try{
File f = new File("annuaire.txt");
Scanner scanner = new Scanner(f);
String nom;
int anneeActuel = 2014;
int anneeNaiss;
try{
while(true){
nom = scanner.next();
anneeNaiss = scanner.nextInt();
System.out.println(nom + " (" +
(anneeActuel - anneeActuel) + " ans)");
}
}catch (NoSuchElementException exception){
break; //fin de fichier atteinte
}
scanner.close();
}catch (FileNotFoundException exception){
System.out.println ("Le fichier n'a pas été trouvé");
}
Dans tous les exemples présentés, on créait à chaque fois une variable pour chaque objet créé,
variable que l'on passait ensuite comme paramètre au constructeur suivant, c'était leur seul rôle
mis à part l'appel à la méthode close qui n'est en fait pas nécessaire, en effet, fermer l'objet de
haut niveau va fermer ceux de bas niveau également. On peut éviter de déclarer plein de
variables supplémentaires si on le souhaite comme le montre l'exemple suivant.
// Version développée
File f = new File ("annuaire");
FileReader fr = new FileReader (f);
BufferedReader br = new BufferedReader (fr);
Scanner scanner = new Scanner (br);
// Version compacte
Scanner scanner = new Scanner (new BufferedReader (new FileReader
(new File ("annuaire"))));