Vorlesung Informatik 2 - Teil A: Java Kurs

6.4 Textdateien lesen

Die Hierarchie der Java I/O Klassen ist sehr komplex, sie erlaubt das Lesen von verschiedenen Quellen (Stream):(Dateisystem, Internet, Kommunikation mit anderen Prozessen):

  • Dateisystem: FileInputStream
  • Tastatur bzw. Standardeingabe: (System.in: InputStream )
  • Hauptspeicher: StringBufferInputStream, ByteArrayInputStream
  • Kommunikation mit anderen Prozessen: PipedInputStream,
  • Kommunikation mit Prozessen im Internet: DataInpuStream in Verbindung mit ServerSocket

Mit einem Stream kann man ein InputStreamReader-Objekt verbinden, von dem man schließlich die Daten liest.

Der Vorteil dieser komplexen Struktur ist, dass ab einer gewissen Abstraktionsstufe der I/O immer gleich funktioniert. Der Nachteil ist eine sehr komplexe und mehrstufige Klassenhierarchie.

Deshalb gibt es für das sequentielle Lesen von Textdateien die sehr bequeme Klasse Scanner.

Beim sequentiellen Lesen einer Datei speichert das System einen internen Zeiger auf die aktuelle Leseposition, den Cursor. Bei jedem Lesevorgang wird der Cursor weiter verschoben bis das Ende der Datei erreicht ist. 

Die Sequentielle Lesen einer Datei hat drei Phasen:

  1. Öffnen der Datei, der Cursor zeigt auf das erste Zeichen.
  2. Lesen des jeweils nächsten Bereichs z.B. nächsten Zeichen oder nächste Zeile. Der Cursor zeigt nach dem Lesen auf das nächste verfügbare Zeichen.
  3. Schließen der Datei.

Beispiel: Datei auf der Standardausgabe ausgaben.

  try{
    Scanner ein = new Scanner(new File("test.txt")); while(ein.hasNextLine()) System.out.println(ein.nextLine()); ein.close(); }catch(IOException e){ System.out.println(e.getMessage());
   }

Da beim Öffnen und Lesen der Datei verschiedene Fehler auftreten können, z.B. FileNotFoundException, brauchen wir hier den try/catch Block.

Wenn wir einen Text in eine JTextArea einlesen wollen, gibt es eine noch bequemere Methode:

JTextArea eingabe = new JTExtarea();
    ...
eingabe.read(new File("test.txt"), null);

In den Übungen verwenden  wir das wenn wir unseren eigenen Editor progtrammieren.


Lehrvideo