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.