web-dev-qa-db-fra.com

Utiliser BufferedReader pour lire un fichier texte

J'ai des problèmes avec BufferedReader

Je veux imprimer les 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();

}

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

Donc, je ne peux pas utiliser la condition br.readLine ()! = Null car elle avance déjà d'une ligne et j'obtiens le résultat

Line 2
Line 4
Line 6

Quelle condition dois-je utiliser pour vérifier s'il reste une nouvelle ligne dans le champ de texte?.

Merci d'avance!

28
Syntic

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 existe une ligne (mais la lit et la jette) et le second lit la ligne suivante . Tu veux:

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

Maintenant, nous appelons seulement readLine() une fois par itération de boucle, et nous utilisons la ligne que nous avons lue pour le "avons-nous terminé?" et "imprimer la ligne" pièces.

67
Jon Skeet

Vous lisez les boucles line à while et vous lisez la ligne suivante dans la boucle. Il suffit donc de la lire dans la boucle while 

 String s;
 while ((s=br.readLine()) != null) {
     System.out.println(s);
  }
4
Alya'a Gamal

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

String line = br.readLine();
while (line != null) { // You might also want to check for empty?
    System.out.println(line);
    line = br.readLine();
}
3
mthmulders
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
Subhojit Das

vous pouvez le stocker dans un tableau, puis utiliser la ligne de votre choix ... c'est l'extrait de code que j'ai utilisé pour lire la ligne d'un fichier et le 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
nik

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
lichengwu

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 aussi la première ligne.

0
sinisterrook

Essayer:

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