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.
Am ... Vous pouvez simplement utiliser une telle construction:
String line;
while ((line = r.readLine()) != null) {
// do your stuff...
}
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;
}
Si vous voulez parcourir toutes les lignes, utilisez ceci:
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
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);
}
}
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();
}