Détecter EOF en Java

Waleed 12 octobre 2023
Détecter EOF en Java

Dans ce tutoriel, nous allons vous présenter comment détecter EOF (End OF File) à l’aide d’une boucle while en Java. Nous discuterons également du développement d’un programme qui continue à lire le contenu jusqu’à ce que la fin du fichier soit atteinte.

Du point de vue de la programmation, l’EOF est un type spécialisé que les développeurs utilisent pour lire en permanence les entrées, que ce soit à partir du fichier ou de la console du clavier. Ce processus se poursuit jusqu’à ce qu’il n’y ait plus de données à récupérer.

Il convient de mentionner ici que les données d’un fichier peuvent être modifiées ou altérées à tout moment. Il est donc pratiquement impossible d’appliquer une boucle contrôlée sentinelle sur ce fichier.

Pour cette raison, nous vous recommandons fortement de toujours utiliser une boucle de fin de fichier pour atténuer la menace potentielle du problème mentionné ci-dessus.

Nous utilisons le clavier comme source d’entrée dans l’exemple de code ci-dessous.

package sampleProject;
import java.util.*;
import java.util.Scanner;
public class Codesample {
  static Scanner console = new Scanner(System.in);
  public static void main(String[] args) {
    int total_ages = 0;
    int age;
    while (console.hasNext()) {
      age = console.nextInt();
      total_ages = total_ages + age;
    }

    System.out.println("Total ages are:" + total\_ages);
  }
}

Production :

99
90
88
Ko
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at sampleProject/sampleProject.Codesample.main(Codesample.java:15)

Nous commençons par déclarer et initialiser l’objet de la classe scanner que. Après cela, j’ai déclaré d’autres variables à utiliser dans notre code.

Vous avez peut-être remarqué que nous utilisons console.hasNext() comme condition d’itération de la boucle. Nous savons déjà que la console est l’objet de notre scanner de classe d’entrée.

D’autre part, hasNext() est une méthode prédéfinie dans la classe d’entrée Scanner. Cette expression ne renvoie true que s’il existe une entrée entière. Sinon, il renvoie faux.

Compilez ce code par vous-même et voyez le résultat. Il ressort assez clairement de la sortie que notre programme continue de lire les données jusqu’à ce que nous fournissions le mauvais type d’entrée. Dans ce cas, ce programme lève une exception d’incompatibilité d’entrée.

Fichier comme source d’entrée

Dans un autre exemple, nous utilisons une boucle while de fin de fichier contrôlée pour lire continuellement les données du fichier.

Disons que nous voulons lire toutes les données du fichier Students\_Result.txt. Le fichier contient les noms des étudiants suivis de leurs résultats aux tests.

Notre objectif dans ce programme est de produire un fichier qui affiche les noms des étudiants, les résultats des tests et les notes.

package sampleProject;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.*;
import java.util.Scanner;
public class Codesample {
  static Scanner console = new Scanner(System.in);
  public static void main(String[] args) throws FileNotFoundException {
    // declare file name as an input object
    Scanner inputFile = **new** Scanner(**new** FileReader("Students\_Result.txt"));
    // declare the output object that stores data we want to display
    PrintWriter outputFile = **new** PrintWriter("Students\_Record.txt");
    // Declare variable to store first name and last name
    String firstName, lastName;
    // declare variable to store score
    double score;
    // declare variable to store student's grad
    char grade = ' ';
    // declare and initialize counter variable
    int counter = 0;
    // continue reading data from the file until the loop reaches end of file
    while (inputFile.hasNext()) {
      // read first name from the provided file
      firstName = inputFile.next();
      // read last name from the file
      lastName = inputFile.next();
      // read score of the students from the filee
      score = inputFile.nextDouble();
      // increment counter variable
      counter++;
      // To evaluate grade of the students, we are using the switch statemet
      switch ((int) score / 10) {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
          grade = 'F';
          break;
        case 6:
          grade = 'D';
          break;
        case 7:
          grade = 'C';
          break;
        case 8:
          grade = 'B';
          break;
        case 9:
        case 10:
          grade = 'A';
          break;
        default:
          outputFile.println("Your score does not meet our criteria");
      }
      //   Display retrieved data using the outputFile object we have declared earlier
      outputFile.println(firstName + " " + lastName + " " + score + " " + grade);
    }
    // If no data is found in the output file
    if (counter == 0)
      outputFile.println("There is not data in your input file");
    // close output file upon reading all the data from it.
    outputFile.close();
  }
}

Production :

Waleed Ahmed 89.5 B
Bob Alice 90.0 A
Khan Arshad 100.0 A
Waqas Jameed 65.5 D
Danish Taimoor 70.5 C
Muaz Junaid 80.5 B
John Harris 88.0 B

Compilez et exécutez ce programme sur votre système pour voir ce qui se passe.