Fine del file

In questa pagina viene spiegato come leggere i caratteri di un file fino alla fine. Questo viene fatto leggendo i caratteri con fr.read() fino a che non si verifica una condizione che indica che il file è finito.

Questa condizione viene verificata sul valore di fr.read(). Va però precisato che questo metodo ritorna un intero, non un carattere.

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

    int x;

    x=fr.read();

Il metodo fr.read() legge un carattere da file, ma poi ritorna un intero. Questo intero può venire convertito in carattere usando un cast:

    char c;

    c=(char) x;

Più in generale, ogni carattere è associato a un numero intero. Per esempio, il carattere 'a' ha numero 97, il carattere 'b' ha numero 98, il carattere ']' ha numero 93.

Usando il cast, si puè trovare il carattere corrispondente a un numero.

   char c;

   c=(char) 97;

Dal momento che il metodo read ritorna un intero, possiamo memorizzarlo in una variabile intera ed eseguire il cast in un secondo momento.

   int x;
   char c;

   x=fr.read();
   c=(char) x;

Il vantaggio di questo metodo è che ci permette di verificare se il file è terminato. Dopo aver letto l'ultimo carattere, il valore ritornato da read() è -1.

Il seguente programma TrovaFine.java legge trenta caratteri dal file prova.txt, segnalando l'eventuale fine del file.

import java.io.*;

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

    int i;

    int x=0;
    char c;

    for(i=0; i<30; i++) {
      x=fr.read();
      if(x==-1)
        System.out.println("Il file e' terminato!");
      else {
        c=(char) x;
        System.out.println(c);
      }
    }
  }
}

Da notare che quando il file è finito, ogni nuova esecuzione di fr.read() dà il valore -1. Quindi, se il file contiene solo venti caratteri allora la ultima dieci esecuzioni di fr.read() ritornano tutte -1.