~Java4Beginners~
~Java4Beginners~

FileWriter

Eine weitere Möglichkeit Datenströme in eine Datei auszulesen, ist das Zusammenspielt zwischen BufferedWriter und FileWriter.

BufferedWriter

Ein Objekt der Klasse BufferedWriter hat die Aufgabe, Eingaben zu puffern. Dies ist immer dann sinnvoll, wenn viele Schreiboperationen von nöten sind. Dadurch können Dateioperationen schneller ausgeführt werden.Standardmäßig fasst der Puffer 8.192 Symbole. Er kann aber über einen parametrisierten Konstruktor auf einen anderen Wert gesetzt werden. Erst wenn der Puffer voll ist oder die Methoden flush() oder close() aufgerufen werden, werden die gepufferten Ausgaben geschrieben. Durch die Verringerung der Anzahl tatsächlicher write()-Aufrufe an das externe Gerät erhöht sich die Geschwindigkeit der Anwendung im Allgemeinen deutlich.

FileWriter

FileWriter ist eine Klasse, mit welcher es ermöglicht wird, zeichenorientiert in eine Datei zu speichern.

Beispiel BufferedWriter/FileWriter

Um mit der Kombination von BufferedWriter und FileWriter zu arbeiten, muss ein Objekt der Klasse BufferedWriter erzeugt werden, welches als Parameter das FileWriter-Objekt bekommt.

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/**
 * Beispielprogramm für den Umgang mit BufferdWriter und FileWriter
 * @author Markus Badzura
 */
public class IO_FileWriter 
{
    public static void main(String[] args) 
    {
        BufferedWriter bw;
        String eingabe;
        ArrayList al = new ArrayList();
        try
        {
        bw = new BufferedWriter(new FileWriter("FileWriter.txt"));
        al.add("blubbsn");
            bw.write((String)al.get(0));
            bw.newLine();
        
        bw.close(); // WICHTIG!!!! Erst mit close() wird der Buffer geschrieben
        }
        catch (IOException e)
        {
            System.err.println("Fehlermeldung: "+e);
        }
    }
}
Zu sehen ist das ganze in Zeile 26. Wenn Sie diese Anweisung ausdokumentieren, dann läuft zwar das Programm fehlerfrei durch, allerdings wird der Inhalt des BufferedWriter-Speichers nicht mehr ausgelesen und ist dadurch mit Beendigung des Programmes verloren.

Beispiel ohne BufferedWriter

Der BufferedWriter ist allerdings nicht zwingend notwendig. Wie bereits beschrieben, bildet er einen Puffer, der blockweises speichern ermöglicht. Sehen wir uns den fileWriter nun in einem Beispiel oder BufferedWriter an.

Was in dem Quelltextauszug nicht sichtbar ist: Es wurde in diesem Programmteil ein File-Objekt mit dem Bezeichner f erzeugt, ebenso wurde eine FileWriter-Objekt w deklariert.

Die Problematik an den ersten Quelltextauszug ist es, dass bei erneuter Ausführung der IO_Filwriter.java alles in der Textdatei vorhandene, überschrieben wird. Dies ist bei dem jetzigen Beispiel nicht mehr möglich.

    new Filewriter(f,true)
Dieser Deklaration eines neuen Filewriter-Objektes wird unser File-Objekt f und der Wahrheitswert true übergeben. Mit dem File-Objekt wird die Zieldatei somit übergeben, und mit der Übergabe des Wahrheitswertes true wird gesagt, dass bei existieren der Datei die Datei nicht neu angelegt (oder der Inhalt gelöscht und überschrieben) wird, sondern dass alle neu hinzugeschriebene Zeichen ans Ende der in der Datei existierenden Zeichen hinzugefügt werden.

Wenn wir ohne BufferWriter arbeiten, haben wir nicht den Vorteil der Methode newLine(), welche einen Zeilenumbruch erzeugt.

Um mit dem FileWriter einen Plattformunabhängigen Zeilenumbruch zu erzeugen verwenden wir eine Funktion der Klasse System, mit welcher wir einen LineSeperator (Zeilenumbruch) dem FileWriter-Objekt übergeben.

    w.write(System.getProperty("line.separator"));
Mit der Methode w.flush() wird alles, was sich noch im FileWriter befindet in die Datei geschrieben, bevor das FileWriter-Objekt mit w.close() geschlossen wird.
nach oben Java4Beginners -- Seitenversion 1.0 -- Stand: 2017-05-17