Lire dans un fichier texte                        

Lire dans un fichier texte

     

Premier méthode : utiliser un BufferdReader

Il s'agit ici de lire un fichier de type texte ligne par ligne et de reproduire ce qui est lu directement à l'écran. On compose paour cela un BufferdReader avec un FileReader.

Cet exemple est particulièrement simple.

import java.io.BufferedReader;
 java.io.FileReader;
 java.io.FileNotFoundException;
 java.io.IOException;

class LireLigne 
{
  public static void main(String[] argv) throws IOException
  {
    BufferedReader lecteurAvecBuffer = null;
    String ligne;

    try
      {
	lecteurAvecBuffer = new BufferedReader(new FileReader(argv[0]));
      }
    catch(FileNotFoundException exc)
      {
	System.out.println("Erreur d'ouverture");
      }
    while ((ligne = lecteurAvecBuffer.readLine()) != null)
      System.out.println(ligne);
    lecteurAvecBuffer.close();
  }
} 
A l'exécution, on obtient en sortie, à l'écran, exactement le contenu du fichier dont le nom est indiqué sur la ligne de commande.

Vous pouvez récupérer ce programme

Deuxième méthode : utiliser un Scanner

Cet exemple permet d'illustrer le fait que la classe Scanner permet une lecture quelquefois plus aisée des fichiers. Dans notre exemple, il s'agit d'additionner des entiers contenus dans un fichier. On donne encore deux possibilités (dont une en commentaires), selon qu'on souhaite localiser le fichier par rapport au répertoire d'exécution ou par rapport au bytecode d'une certaine classe.
class LireFichierTexte {
    public static void main(String[] arg)  throws java.io.IOException {
	java.util.Scanner lecteur ;
	
	java.io.File fichier = new java.io.File(arg[0]);
	lecteur = new java.util.Scanner(fichier);
	
	/* ou bien
	   java.io.InputStream entree = 
	   LireFichierTexteBis.class.getResourceAsStream((arg[0])); 
	   lecteur = new java.util.Scanner(entree);
	*/
	
	int somme = 0;
	while (lecteur.hasNextInt()) somme += lecteur.nextInt();
	System.out.println(somme);
    }
}

Vous pouvez récupérer ce programme


lecteur.hasNextInt() : cette instruction renvoie true ou false selon que la prochaine entrée à lire a ou non un format correspondant à un entier. }

© Irène Charon, Télécom ParisTech 2011