web-dev-qa-db-fra.com

Lecture de lignes avec BufferedReader et vérification de la fin du fichier

Si j'ai quelque chose comme ça dans mon code:

String line = r.readLine();  //Where r is a bufferedReader

Comment puis-je éviter un blocage si la ligne suivante correspond à la fin du fichier? (c'est-à-dire nul)

Je dois lire la ligne suivante car il peut y avoir quelque chose que je dois traiter mais s'il n'y a pas de code, il y a un blocage.

S'il y a quelque chose là-bas, tout va bien, mais je ne peux pas être sûr qu'il y aura quelque chose là-bas.

Donc, si je fais quelque chose comme: (pseudo code):

if (r.readLine is null)
//End code

else {check line again and excecute code depending on what the next line is}

Le problème que j'ai avec quelque chose comme ceci est, que quand je vérifie la ligne contre null, elle passe déjà à la ligne suivante, alors comment puis-je vérifier à nouveau?

Je n'ai pas trouvé de moyen de le faire - toute suggestion serait d'une grande aide.

9
Zippy

Am ... Vous pouvez simplement utiliser une telle construction:

String line;

while ((line = r.readLine()) != null) {
   // do your stuff...
}
28
Andremoniy

Vous pouvez utiliser ce qui suit pour vérifier la fin du fichier.

public bool isEOF(BufferedReader br)  
{
     boolean result;

     try 
     {
         result = br.ready();
     } 
     catch (IOException e)
     {
         System.err.println(e);
     }
     return result;
}
3
Stephen Whitlock

Si vous voulez parcourir toutes les lignes, utilisez ceci:

while((line=br.readLine())!=null){
    System.out.println(line);
}
br.close();
3
Lugaru

Une question en premier lieu, pourquoi n'utilisez-vous pas " Approche de programmation fonctionnelle "? Quoi qu'il en soit, une nouvelle méthode lines () a été ajoutée depuis Java 1.8 , il permet BufferedReader renvoie le contenu sous la forme Stream . Il obtient toutes les lignes du fichier sous forme de flux. Vous pouvez ensuite trier la chaîne en fonction de votre logique, puis la collecter dans une liste/un ensemble et l'écrire dans le fichier de sortie. Si vous utilisez la même approche, vous n'avez pas à vous inquiéter de NullPointerException . Ci-dessous l'extrait de code pour la même chose: -

import Java.io.IOException;
import Java.io.PrintWriter;
import Java.nio.file.Files;
import Java.nio.file.Paths;
import Java.util.stream.Collectors;

public class LineOperation {
    public static void main(String[] args) throws IOException {
            Files.newBufferedReader(Paths.get("C://xyz.txt")).
            lines().
            collect(Collectors.toSet()). // You can also use list or any other Collection
            forEach(System.out::println);
    }

}
0
Abhinav

Dans votre cas, vous pouvez lire la ligne suivante car il y a peut-être quelque chose à l'intérieur. S'il n'y a rien, votre code ne plantera pas.

String line = r.readLine();
while(line!=null){
   System.out.println(line);
   line = r.readLine();
}
0
Sushant Somani