Sonntag, 18. März 2012

Java: Eine Textdatei auslesen

Wir wollen eine einfache Textdatei auslesen und den Inhalt ausgeben.
Wir gehen davon aus, dass die angegebene Datei tatsächlich existiert und verzichten für das Beispiel auf weitere Prüfungen.
Wir erzeugen ein Objekt vom Typ BufferedReader welches sich zwingend des "FileReader"s bedient um die Textdatei zeilenweise mit "readLine" auszulesen.
File datei = new File("d:/meinOrdner", "MeinText.txt");
try {
    BufferedReader lies = new BufferedReader(new FileReader(datei));
    String zeile;
    while ((zeile = lies.readLine()) != null) {
            System.out.println(zeile);
    }
    lies.close();
} catch (Exception e) {
        e.printStackTrace();
}
Soweit das klassische Beispiel welches in dieser Form unzählige male im Internet zu finden ist. Offen bleibt in den meisten Fällen nur die Frage welche Aufgabe der verwendete FileReader innehat.

Bitte einmal ohne BufferedReader

Sehen wir uns einmal an was der FileReader eigentlich macht.
File datei = new File("d:/test", "MeinText.txt");

int laenge = (int) datei.length();
try {
    FileReader lies = new FileReader(datei);

    for (int i = 0; i < laenge; i++) {
        int zeichen = lies.read();
        System.out.println(zeichen);
    }

    lies.close();
} catch (Exception e) {
    e.printStackTrace();
}
Ein Blick auf die Ausgabe macht klar was in dem Zusammenspiel BufferedReader und FileReader passiert. Der FileReader liest Zeichen für Zeichen, gibt jedes Zeichen als numerischen Wert zurück. Empfägt er keine Zeichen mehr, ist der Rügabewert "-1".

Erst der BufferedReader ist in der Lage diese numerischen Werte in besser lesbarer Form weiter auszuwerten und zur Verfügung zu stellen.
Etwas seltsam mutet es da schon an, dass der FileReader als "Convenience class" in der API-Dokumentation geführt wird.

Keine Kommentare:

Kommentar veröffentlichen