Intro

J'ai créé ce blog pour partager avec vous une de mes passions : le développement informatique. J'essaierais de vous faire profiter de mes découvertes et surtout de publier régulièrement des articles. N'hésitez pas à apporter vos commentaires!

jeudi 15 septembre 2011

Java : Lire un fichier

Lorsqu’on cherche sur internet comment lire un fichier en java, on tombe généralement sur un exemple similaire à celui-ci :
BufferedReader buff = new BufferedReader(new FileReader("path_to_file"));
 String str = null;
 while((str = buff.readLine()) != null){
     // On traite la ligne obtenue
 }


Avec la version 1.5 de java est apparue une nouvelle classe utilitaire pour la lecture de fichier : la classe Scanner. Notre exemple de code devient alors :
Scanner scanner = new Scanner(new FileReader("path_to_file"));
 String str = null;
 while (scanner.hasNextLine()) {
     str = scanner.nextLine();
     // suite du traitement
 }

Vous me direz qu’il n’y a pas beaucoup de différences. Effectivement dans ce cas précis on ne voit pas l’intérêt de privilégier une méthode par rapport à l’autre.

Imaginons maintenant que nous voulions lire notre fichier mot à mot, dans le premier cas nous aurions :
String str = null;
 String[] mots = null ;
 while((str = buff.readLine()) != null){
     // On traite la ligne obtenue
     mots = str.split(" ") ;
     for(String mot : mots){
              // On traite le mot
     }
 }

et avec la classe Scanner cela devient :
Scanner scanner = new Scanner(new FileReader("path_to_file"));
 String str = null;
 String mot = null;
 while (scanner.hasNext()) {
     mot = scanner.next();
 }

Le gros avantage de la classe Scanner est qu’elle délimite le flux en token. Le délimiteur par défaut est le caractère espace, mais vous pouvez très bien le changer pour utiliser le point virgule par exemple.

Cela ne s’arrête pas là, si votre fichier contient des entiers vous pourrez utiliser la fonction nextInt() pour récupérer leurs valeurs. Vous pourrez aussi rechercher des patterns à l’aide de la fonction findInLine(String pattern)

On se rend compte que la classe Scanner offre beaucoup plus de possibilités qu’un simple BufferedReader et vous facilitera la vie par la même occasion. Allez donc faire un tour ici pour voir l’ensemble des méthodes disponibles.

4 commentaires:

Anonyme a dit…

Merci beaucoup!!!!

Anonyme a dit…

Merci beaucoup, c'est bien exposé et ça m'a été d'une très grande aide. ^_^

Anonyme a dit…

Merci ! très utile, continue comme ça.

Anonyme a dit…

Merci, cela va beaucoup me servir !