Lettura di stringhe da file

È possibile leggere da file una linea per volta, invece di un carattere per volta. Questo permette anche la lettura di interi, reali, ecc.

Per poter leggere una linea per volta, è necessario creare un oggetto BufferedReader a partire dal FileReader. In altre parole, si crea prima un FileReader, poi usando questo si crea un BufferedReader. Quest'ultimo si può quindi usare per la lettura riga per riga.

    FileReader f;
    f=new FileReader("prova.txt");

    BufferedReader b;
    b=new BufferedReader(f);

A questo punto si può leggere una riga per volta usando b.readLine().

    String s;

    s=b.readLine();

Ogni volta che si fa b.readLine() si ottiene una nuova riga del file. In altre parole, la prima volta che si fa s=b.readLine(); la variabile s contiene la prima riga del file, la volta successiva che viene eseguito s=b.readLine(); in s viene messa la seconda linea del file.

Per esempio, il programma PrimeDue.java legge e stampa le prime due linee del file prova.txt

import java.io.*;

class PrimeDue {
  public static void main(String args[])
  throws IOException {
    FileReader f;
    f=new FileReader("prova.txt");

    BufferedReader b;
    b=new BufferedReader(f);

    String s;

    s=b.readLine();
    System.out.println(s);

    s=b.readLine();
    System.out.println(s);
  }
}

La prima esecuzione di s=b.readLine(); mette in s la prima linea del file. La seconda esecuzione ci mette la seconda linea.

Lettura di un file fino alla fine

Se l'ultima linea del file è stata già letta, ogni successiva esecuzione di b.readLine()null come valore di ritorno. Questo comportamento è simile alla lettura per caratteri, con null al posto di -1

Il ciclo di lettura è quindi simile a quello per leggere tutti i caratteri di un file. Il programma Tutte.java usa un ciclo con break

import java.io.*;

class Tutte {
  public static void main(String args[])
  throws IOException {
    FileReader f;
    f=new FileReader("prova.txt");

    BufferedReader b;
    b=new BufferedReader(f);

    String s;

    while(true) {
      s=b.readLine();
      if(s==null)
        break;
      System.out.println(s);
    }
  }
}

Si può risolvere il problema anche usando un ciclo do-while, come per il caso di lettura carattere per carattere.

Note sulla lettura di stringhe

Prima va creato il FileReader e poi con questo si crea il BufferedReader

Non ci sono le virgolette su null