Home > Informatik > Formale Sprachen > Folge 22: Codebuffer

22.3 Ein besserer Codebuffer

22.1 - 22.2 - 22.3

Wir wollen nun die fill-Methode des Codebuffers durch eine load-Methode ersetzen, die den Stackcode aus einer Textdatei einliest, die Sie zuvor mit einem einfachen Texteditor geschrieben haben. Wichtig ist hier, dass Sie die Textdatei in dem aktuellen BlueJ-Projektordner speichern.

Ein FileReader und ein BufferedReader

Betrachten Sie folgenden Java-Code:

public void show(String dateiname) throws IOException
{
   FileReader reader = new FileReader(dateiname);
   BufferedReader inBuffer = new BufferedReader(reader);

   String line = inBuffer.readLine();
   
   while (line != null)
   {
      System.out.println(line);
      line = inBuffer.readLine();
   } 
}

Diese show-Methode öffnet eine Textdatei mit dem übergebenem Dateinamen und gibt sie Zeile für Zeile in der Konsole aus.

Mit dem Objektinspektor kann man diese Methode nicht ausführen, das liegt an dem Rückgabewert IOException, mit dem der Objektinspektor nichts anfangen kann. Wir müssen also eine zweite Methode schreiben, die lediglich dazu dient, show auszuführen:

public void lesen()
{
   try
   {
      show("Test.txt");
   }
   catch(IOException e)
   {
      System.out.println("Fehler beim Öffnen der Datei");
   }
}

Die Methode show wird versuchsweise aufgerufen mit der try-Anweisung. Wenn es dabei zu keinem Laufzeitfehler kommt, ist alles gut. Der show-Befehl wird dann ausgeführt. Kommt es aber zu einem Laufzeitfehler, stürzt das Programm nicht einfach ab, sondern es wird eine geordnete Fehlermeldung (IOException) ausgegeben, nämlich "Fehler beim Öffnen der Datei".

Einzelheiten

Einzelheiten zu den Klassen FileReader und BufferedReader finden Sie in dem Lexikon-Artikel "Textdateien lesen".

Ein besserer Codebuffer

Unser Ziel ist ein Codebuffer, der eine Textdatei mit dem Stackcode Zeile für Zeile einliest und in seinem String-Array speichert. Wir müssen also die fill-Methode des alten Codebuffers durch eine load-Methode ersetzen, was eigentlich gar nicht so schwer ist. Damit wären wir bei der nächste Übung:

Übung 22.3-1
  1. Schreiben Sie die Klasse Codebufferentsprechend um.
  2. Legen Sie Textdateien mit Stackcode an und überprüfen Sie, ob Ihr Interpreter in der Lage ist, den enthaltenen Code korrekt auszuführen.

Nachdem Sie jetzt eine Klasse Codebuffer geschrieben haben, die in der Lage ist, Steuercode für eine Stackmaschine aus einer Textdatei zu lesen und in einem internen Array zu speichern, sind wir im Grunde fertig mit unserem ersten Stackinterpreter. 

Das nächste größere Vorhaben ist die Implementierung einer Variablenverwaltung.

Weiter mit Folge 23 Variablenverwaltung...