Utilisation de BufferedReader pour lire le fichier texte

J'ai des problèmes avec L'utilisation du BufferedReader

Je veux imprimer le 6 lignes d'un fichier texte:

public class Reader {

public static void main(String[]args) throws IOException{

    FileReader in = new FileReader("C:/test.txt");
    BufferedReader br = new BufferedReader(in);

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

}

Maintenant, à partir de ce que je peux rassembler chaque fois que j'appelle la méthode readLine (), elle passe automatiquement à la ligne suivante.

Donc je ne peux pas utiliser la condition br.readLine ()!= null car il va déjà l'avancer d'une ligne et j'obtiens la sortie:

Line 2
Line 4
Line 6

Quelle Condition dois-je utiliser pour vérifier s'il y a encore une nouvelle ligne dans le champ de texte.

Merci l'avance!

27
demandé sur Syntic 2013-04-19 16:28:56

8 réponses

C'est le problème:

while (br.readLine() != null) {
    System.out.println(br.readLine());
}

Vous avez deux appels à readLine - le premier seulement vérifie qu'il y a une ligne (mais la lit et la jette) et le second lit la ligne suivante . Vous voulez:

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

Maintenant, nous ne faisons qu'appeler readLine() Une fois par itération de boucle, et en utilisant la ligne que nous avons lue à la fois pour le "avons-nous terminé?"et" imprimer la ligne " pièces.

62
répondu Jon Skeet 2013-04-19 12:31:04

Vous lisez line à travers la boucle while et à travers la boucle vous lisez la ligne suivante, alors lisez-la simplement dans while loop

 String s;
 while ((s=br.readLine()) != null) {
     System.out.println(s);
  }
4
répondu Alya'a Gamal 2013-04-19 12:36:27

Vous pouvez affecter le résultat de br.readLine() à une variable et l'utiliser à la fois pour le traitement et pour la vérification, comme ceci:

String line = br.readLine();
while (line != null) { // You might also want to check for empty?
    System.out.println(line);
    line = br.readLine();
}
3
répondu mthmulders 2013-04-19 12:31:20
private void readFile() throws Exception {
      AsynchronousFileChannel input=AsynchronousFileChannel.open(Paths.get("E:/dicom_server_storage/abc.txt"),StandardOpenOption.READ);
      ByteBuffer buffer=ByteBuffer.allocate(1024);
      input.read(buffer,0,null,new CompletionHandler<Integer,Void>(){
        @Override public void completed(    Integer result,    Void attachment){
          System.out.println("Done reading the file.");
        }
        @Override public void failed(    Throwable exc,    Void attachment){
          System.err.println("An error occured:" + exc.getMessage());
        }
      }
    );
      System.out.println("This thread keeps on running");
      Thread.sleep(100);
    }
1
répondu Subhojit Das 2016-05-24 13:42:23

Peut-être que vous voulez dire ceci:

public class Reader {

public static void main(String[]args) throws IOException{

    FileReader in = new FileReader("C:/test.txt");
    BufferedReader br = new BufferedReader(in);
    String line = br.readLine();
    while (line!=null) {
        System.out.println(line);
        line = br.readLine();
    }
    in.close();

}
0
répondu lichengwu 2013-04-19 12:31:43

Essayez:

String text= br.readLine();
while (text != null) 
{
  System.out.println(text);
  text=br.readLine();
}
in.close();
0
répondu Gokhan 2013-04-19 12:50:45

Ou

public String getFileStream(final String inputFile) {
        String result = "";
        Scanner s = null;

        try {
            s = new Scanner(new BufferedReader(new FileReader(inputFile)));
            while (s.hasNext()) {
                result = result + s.nextLine();
            }
        } catch (final IOException ex) {
            ex.printStackTrace();
        } finally {
            if (s != null) {
                s.close();
            }
        }
        return result;
}

Cela obtient également la première ligne.

0
répondu sinisterrook 2015-04-08 21:06:28

Vous pouvez le stocker dans un tableau, puis utiliser la ligne que vous voulez.. c'est l'extrait de code que j'ai utilisé pour lire la ligne du fichier et la stocker dans un tableau de chaînes, j'espère que cela vous sera utile:)

public class user {
 public static void main(String x[]) throws IOException{
  BufferedReader b=new BufferedReader(new FileReader("<path to file>"));
  String[] user=new String[30];
  String line="";
  while ((line = b.readLine()) != null) {
   user[i]=line; 
   System.out.println(user[1]);
   i++;  
   }

 }
}
0
répondu nik 2016-01-07 07:09:31