Navigation überspringen

Klassenkombinationen

Erklärtes Beispiel

package bufferedreaderklasse;

import java.io.*;
import java.util.Scanner;
/**
 * @author T.Smit
 */
public class BufferedReaderIOFromFile {

    public static void main(String[] args) throws FileNotFoundException, IOException {

        String eingeleseneZeile = null;
        String stringPuffer = "";
        String pfadInDasStammverzeichnis = new File("").getAbsolutePath();
        FileReader textIn = new FileReader(pfadInDasStammverzeichnis + "/src/bufferedreaderklasse/test.txt");
        BufferedReader br = new BufferedReader(textIn);
        while ((eingeleseneZeile = br.readLine()) != null) {
            stringPuffer += eingeleseneZeile + "\r\n";
        }//while ((eingeleseneZeile = br.readLine()) != null)
        textIn.close();
        System.out.println(stringPuffer);

        //Text erweitern und in neue Datei schreiben
        Scanner eingabe = new Scanner(System.in);
        System.out.print("Textergänzung eingeben: ");
        String newInput = eingabe.nextLine();
        try {
            // zweiter Wert bei FileWriter(Pfad,Boolean): Boolean = false:löschen Zeiger auf Null und true anhängen
            FileWriter writer = new FileWriter(pfadInDasStammverzeichnis + "/src/bufferedreaderklasse/testOutNeu.txt", true);
            writer.write(stringPuffer + newInput);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }//catch (IOException e)

    }//public static void main(String[] args)

}//public class BufferedReaderIOFromFile

Die Klassen

  • FileReader
  • BufferedReader
  • FileWriter

entstammen alle dem gleichen Paket java.io.

Zeile 14 beinhaltet einen kleinen Trick, um den aktuellen Pfad ins Stammverzeichnis von Java zu lokalisieren. Anschließend können die spezifischen Pfade ab dort relativ adressiert werden, sh. Zeile 15.  In Zeile 20 schließen wir die zum Lesen geöffnete Datei wieder (gebührt dem guten Stil!). Die Zeilen 16 bis 19 lesen nun wieder den Text aus der Datei ein und speichern ihn in eine zuvor definierte Variable vom Typ String, vgl. Abschnitt BufferedReader. Diesen eingelesenen Text erweitern wir nun durch eine Konsoleneingabe, die wir mit Hilfe der Scanner-Klasse realisieren.

Hinweis:

Zeile 27 und 32 sind Gegenstand des Kapitels Fehlerbehandlung.

Die Klasse FileWriter kümmert sich nun um das Anlegen einer neuen Datei und das Schreiben in diese. Bei Instanzieren aus dieser Klasse FileWriter bestimmt der zweite Übergabewert den Umgang mit dem "Schreibe-Pointer". Dieser Zeiger signalisiert, ob der Text an den Text einer eventuell vorhandenen Datei angehängt (true) wird oder ob der Zeiger auf Null gesetzt wird, wodurch der bisherige Inhalt gelöscht wird. Existiert die Datei im angegebenen Pfad noch nicht, versucht FileWriter die Datei anzulegen. Dabei spielt die Einschränkung "versucht" eine wichtige Rolle und ist in den Zeilen 27 und 32 berücksichtigt.

Weiterführende Aufgabe

Ausgangssituation

Erzeugen Sie einen Java-Quelltext, mit dem Sie fortlaufend Personendaten einzelner Personen aufnehmen können (z.B. Vor- und Nachnamen). Das heißt, die personenbezogenen Datensätze sollen zeilenweise in eine Textdatei geschrieben werden.

Der Benutzer soll in der Lage sein, diese Daten über ein einfaches GUI (Graphical User Interface) einzugeben.

 

Hinweis zur Umsetzung:

Verwenden Sie aus dem Paket java.io folgende Klassen

  • File
  • FileNotFoundException
  • IOException
  • FileReader
  • BufferedReader
  • FileWriter

und aus dem Paket javax.swing die Klasse

  • JOptionPane

Jede dieser Klassen leistet einen Beitrag zur Lösung der Problemstellung.

Die Daten der Benutzer sollen via Konsole eingetragen werden. Nutzen Sie hierfür die Scanner-Klasse aus dem java.util-Paket.