Java : Lire un fichier en partant de la fin

Voilà un moment que je n’ai pas rédigé d’articles mais je n’ai pas totalement abandonné, en voici la preuve.

Ayant besoin de parcourir un fichier ligne par ligne en partant de la fin je me suis construit une petite classe et je vous la partage ici : FromEndReader.java.

Version 0.2 : Nouvelle version de FromEndReader qui permet de limiter un nombre de ligne lues.

Version 0.3 : Nouvelle version de FromEndReader qui corrige la lecture des lignes vides. Merci à Thibault pour le coup de pouce. Le lien ci-dessus a été mis à jour.

Utilisation ligne par ligne

try {
 
	// Ouverture du fichier test.txt
	// sur 300 caractères maximum (les sauts de lignes comptent comme 1 caractère)
	// et sur 10 lignes maximum
	FromEndReader reader = new FromEndReader("test.txt");
	reader.setMaxByte(300);
	reader.setMaxLine(10);
	String content = null;
 
	// Lecture du fichier
	do {
		content = reader.readLine();
		if (content != null) {
			System.out.println(content);
		}
	} while (content != null);
 
	// Fermeture du fichier
	reader.close();
 
} catch (IOException e) {
	e.printStackTrace();
}
	// Ouverture du fichier test.txt
	// sans limitations sur le nombre de caractères lus
	FromEndReader reader = new FromEndReader("test.txt", -1);

Utilisation byte par byte

try {
 
	// Ouverture du fichier test.txt sur 300 caractères maximum
	FromEndReader reader = new FromEndReader("test.txt");
	reader.setMaxByte(300);
	Byte content = null;
 
	// Lecture du fichier
	do {
		content = reader.readByte();
		if (content != null) {
			System.out.println((char) content.byteValue());
		}
	} while (content != null);
 
	// Fermeture du fichier
	reader.close();
 
} catch (IOException e) {
	e.printStackTrace();
}
Tagués avec : , , ,
Publié dans Java
Un commentaire pour “Java : Lire un fichier en partant de la fin
  1. Thibault dit :

    Bonjour,

    Merci pour ce code plutôt efficace !
    Je remonte néanmoins une petite faille dans la lecture d’un fichier.

    La fonction « readLine » renvoi null lorsque la ligne est vide, mais cela ne signifie pas qu’il n’y a plus rien à lire dans le fichier.

    Voici un petit patch simple que j’ai mis en place dans mon cas :

    –> Début du code à partir de la déclaration de la fonction readLine.

    //2013-06-18 : Add empty boolean switch to indicate if line is empty or if it’s end of file
    public String readLine() throws IOException {
    StringBuilder line = new StringBuilder();
    byte code = 0;
    boolean empty = true;

    while (–position >= 0 && maxByte != 0 && maxLine != 0) {
    empty = false;

    –> La suite du code ensuite.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*