Parcourir fichiers texte pour en afficher le contenu

// ne pas faire attention aux imports, ils sont faits automatiquement par eclipse
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * Cette classe permet de parcourir un fichier texte et d'en afficher le
 * contenu à l'écran.
 */
public class Parcours {
	///////////////////////////////////////////////////////////////////////////
	// méthode main
	public static void main(String[] args) {
		/* Il faut créer un dossier "tests-java" dans C:\
		 * cela nous permettra d'y faire des tests sans risquer d'endommager
		 * d'autres fichiers par erreur.
		 */
		String cheminDesFichiers = "C:\\tests-java\\";
		/* Il faut ensuite créer un fichier "mon_fichier.txt" dans C:\tests-java
		 * le fichier peut rester vide ou peut contenir du texte (provenant par
		 * exemple du site : http://www.lipsum.com).
		 */
		String cheminFichierCourant = cheminDesFichiers + "mon_fichier.txt";

		// appel de la méthode statique qui va nous permettre d'afficher le fichier
		afficherFichier(cheminFichierCourant);
	}

	///////////////////////////////////////////////////////////////////////////
	/**
	 * Cette méthode permet d'afficher le contenu d'un fichier de chemin 'chemin'
	 * sur la sortie console. La méthode utilisée est celle du BufferedReader.
	 */
	public static void afficherFichier(String chemin) {
		/* A ce stade, on sait juste qu'on veut afficher un fichier...
		 * mais la question est : comment ? Qu'est-ce qui existe en Java et qui
		 * peut nous aider efficacement à cette tâche ?
		 * Sur Google, recherchez ceci "java read file"
		 * Résultat : http://java.sun.com/javase/6/docs/api/java/io/BufferedReader.html
		 * La documentation explique ce qu'est un objet BufferedReader mais pour nous,
		 * nous allons nous contenter de savoir qu'un "reader" permet de parcourir un
		 * fichier en lecture (contrairement au BufferedWriter qui permettra d'écrire
		 * un fichier partie par partie, voir le tutorial adéquat).
		 * Buffered signifie "avec utilisation d'un tampon (mémoire)". Pour l'instant,
		 * nous n'allons pas nous préoccuper de ceci mais encore une fois, pour en
		 * savoir plus, sur Google, recherchez "buffer" : http://fr.wikipedia.org/wiki/Buffer !
		 *
		 * En tapant ceci : BufferedReader bReader = new BufferedReader(
		 * eclipse nous fait savoir qu'il faut au constructeur un objet de type Reader
		 * (http://java.sun.com/javase/6/docs/api/java/io/Reader.html)
		 * La documentation de BufferedReader (voir plus haut) nous donne un exemple
		 * d'utilisation (que nous allons suivre mais que nous allons faire en deux étapes :
		 * 1) créer l'objet FileReader (classe enfant de Reader)
		 * 2) créer l'objet BufferedReader avec dans l'argument du constructeur le FileReader)
		 *
		 * Le FileReader sera construit en utilisant le contructeur qui prend un String (le
		 * chemin du fichier). Ce String est le paramètre de notre méthode : chemin.
		 * Il faudra néanmoins gérer les exceptions à ce niveau : FileNotFoundException !
		 */
		try {
			FileReader fReader = new FileReader(chemin);
			BufferedReader bReader = new BufferedReader(fReader);
			/* A ce stade, nous savons que nous avons un objet qui va nous permettre de
			 * parcourir un fichier mais nous ne connaissons pas encore la méthode qu'il
			 * va falloir appliquer au BufferedReader => il faut aller voir la documentation !
			 *
			 * Nous trouvons la méthode (dans le "Method Summary") :
			 *  String readLine()
			 *  	Reads a line of text.
			 *  Et plus bas :
			 *  	Returns:
			 *  		A String containing the contents of the line, not including
			 *  		any line-termination characters, or null if the end of the
			 *  		stream has been reached
			 *
			 *  Cela se déchiffre comme suit : String signifie que la méthode readLine()
			 *  renvoie un String. Les parenthèses vides signifient qu'il n'y a pas d'argument
			 *  à donner. Le texte en dessous est la description. En français, cela donne :
			 *  "Lit une ligne de texte." => nous y sommes donc !
			 *
			 *  Quand readLine() renvoit null, nous savons que nous sommes à la fin du fichier.
			 *
			 *  Bien sûr, pour parcourir un fichier, comme un tableau ou une liste ou toute
			 *  autre structure linéaire, nous allons utiliser une boucle.
			 *  Quand est-ce que celle-ci s'arrête ? Pour un tableau, c'est à la fin du...
			 *  tableau. Pour un fichier, c'est à  la fin du... fichier (pas de miracles).
			 */
			String ligne = null;
			while( (ligne = bReader.readLine()) != null) {
				/* Tant que bReader.readLine() (stockée dans ligne) est différent de null, cela
				 * signifie que quelque chose a été lu.
				 * readLine() peut lancer une IOException, nous la catchons plus bas.
				 */
				// arrivé ici, tout va bien : nous pouvons afficher la ligne lue
				System.out.println(ligne);
			}
			/* Après avoir traité un fichier (lecture/écriture), il faut toujours prendre
			 * la bonne habitude de le libérer. Pour ce faire, nous cherchons la méthode de
			 * BufferedReader qui nous permet de le faire et on trouve :
			 * 	void 	close()
			 * 		Closes the stream and releases any system resources associated with it.
			 */
			bReader.close();
		} catch (FileNotFoundException e) {
			System.out.println("Erreur ouverture fichier en lecture. Arrêt du programme.");
			System.exit(-1); // pour arrêter le programme et quitter avec le code d'erreur -1
		} catch (IOException e) {
			System.out.println("IOException pour cause indéterminée. Arrêt du programme.");
			System.exit(-1);
		}
	}
}

Articles liés


Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks

Reply

  Loading...
c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
esc
cancel