EOF erkennen in Java

Waleed 12 Oktober 2023
EOF erkennen in Java

In diesem Tutorial stellen wir vor, wie man EOF (End OF File) mit einer while-Schleife in Java erkennt. Wir werden auch die Entwicklung eines Programms besprechen, das den Inhalt liest, bis das Ende der Datei erreicht ist.

Aus Sicht der Programmierung ist EOF ein spezialisierter Typ, den Entwickler verwenden, um kontinuierlich Eingaben zu lesen, sei es aus der Datei oder der Tastaturkonsole. Dieser Vorgang wird fortgesetzt, bis keine Daten mehr abzurufen sind.

Es ist hier erwähnenswert, dass Daten in einer Datei jederzeit modifiziert oder geändert werden können. Es ist also praktisch unmöglich, eine Sentinel-gesteuerte Schleife über diese Datei anzuwenden.

Aus diesem Grund empfehlen wir dringend, dass Sie immer eine End-of-File-Schleife verwenden, um die potenzielle Bedrohung durch das oben erwähnte Problem zu mindern.

Im folgenden Codebeispiel verwenden wir die Tastatur als Eingabequelle.

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);
  }
}

Ausgabe:

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)

Wir beginnen damit, dass wir das Objekt der Scannerklasse that deklarieren und initialisieren. Danach habe ich einige andere Variablen zur Verwendung in unserem Code deklariert.

Sie haben vielleicht bemerkt, dass wir console.hasNext() als Iterationsbedingung der Schleife verwenden. Wir wissen bereits, dass console das Objekt unserer Eingabeklasse scanner ist.

Andererseits ist hasNext() eine vordefinierte Methode in der Eingabeklasse Scanner. Dieser Ausdruck gibt nur dann true zurück, wenn eine ganzzahlige Eingabe vorhanden ist. Andernfalls wird false zurückgegeben.

Kompilieren Sie diesen Code selbst und sehen Sie sich die Ausgabe an. Aus der Ausgabe ist ziemlich offensichtlich, dass unser Programm die Daten so lange liest, bis wir den falschen Eingabetyp bereitstellen. In diesem Fall löst dieses Programm eine Input Mismatch-Ausnahme aus.

Datei als Eingabequelle

In einem anderen Beispiel verwenden wir eine Dateiende-gesteuerte while Schleife, um kontinuierlich Daten aus der Datei zu lesen.

Nehmen wir an, wir wollen alle Daten aus der Datei Students\_Result.txt lesen. Die Datei enthält die Namen der Schüler, gefolgt von ihren Testergebnissen.

Unser Ziel in diesem Programm ist es, eine Datei auszugeben, die die Namen, Testergebnisse und Noten der Schüler anzeigt.

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();
  }
}

Ausgabe:

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

Kompilieren Sie dieses Programm und führen Sie es auf Ihrem System aus, um zu sehen, was passiert.