Lettura da file: soluzioni alternative

La prima soluzione alternativa è quella di fare un ciclo in cui la condizione è sempre vera, e poi usare break quando viene letto il valore -1. Questa soluzione viene implementata nel programma FineBreak.java riportato qui sotto.

import java.io.*;

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

    int x=0;
    char c;

    while(true) {
      x=fr.read();
      if(x==-1)
        break;

      c=(char) x;
      System.out.println(c);
    }
  }
}

Una soluzione alternativa è quella di leggere il primo carattere, e poi entrare nel ciclo. A ogni passo, viene prima stampato il carattere letto in precedenza e poi letto un nuovo carattere. Questa soluzione è implementata dal programma FineDopo.java

import java.io.*;

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

    int x;
    char c;

    x=fr.read();

    while(x!=-1) {
      c=(char) x;
      System.out.println(c);
      x=fr.read();
    }
  }
}

Questa soluzione funziona nel modo seguente: prima viene letto un carattere. Se il file non è finito (cosa che potrebbe avvenire dato che il file potrebbe anche essere vuoto, ossia contenere zero caratteri), si entra nel ciclo. A ogni esecuzione del corpo del ciclo, viene prima stampato il carattere letto in precedenza e poi letto un nuovo carattere (che verrà poi stampato nella successiva iterazione del ciclo). Quando viene letto il valore -1, il ciclo termina, quindi non ci sono iterazioni successive in cui il valore -1 verrebbe stampato.

Un metodo alternativo è quello di usare i cicli do-while, e viene visto di seguito.