Java FileWriter

Die Klasse Java FileWriter, java.io.FileWriter, ermöglicht das Schreiben von Zeichen in eine Datei. In dieser Hinsicht funktioniert der Java FileWriter ähnlich wie der FileOutputStream, nur dass ein FileOutputStream bytebasiert ist, während ein FileWriter zeichenbasiert ist. Der FileWriter ist also für das Schreiben von Text gedacht. Ein Zeichen kann einem oder mehreren Bytes entsprechen, je nach dem verwendeten Zeichenkodierungsschema. Die Java FileWriter Klasse ist übrigens eine Unterklasse der Java Writer Klasse.

FileWriter Beispiel

Hier ist ein einfaches Java FileWriter Beispiel:

Writer fileWriter = new FileWriter("data\filewriter.txt");fileWriter.write("data 1");fileWriter.write("data 2");fileWriter.write("data 3");fileWriter.close();

Hinweis: Die korrekte Ausnahmebehandlung wurde hier der Übersichtlichkeit halber übersprungen. Um mehr über die korrekte Behandlung von Ausnahmen zu erfahren, gehen Sie zu Java IO Exception Handling.

Die FileWriter hat auch andere Konstruktoren, mit denen Sie die Datei, in die geschrieben werden soll, auf verschiedene Weise angeben können. Schauen Sie in der offiziellen JavaDoc nach detaillierteren Informationen.

Überschreiben vs. Anhängen der Datei

Wenn Sie eine Java FileWriter erstellen, können Sie entscheiden, ob Sie eine bestehende Datei mit demselben Namen überschreiben oder an eine bestehende Datei anhängen wollen. Sie entscheiden das, indem Sie den FileWriter-Konstruktor wählen, den Sie verwenden.

Der FileWriter-Konstruktor, der nur einen Parameter, den Dateinamen, annimmt, überschreibt jede vorhandene Datei:

Writer fileWriter = new FileWriter("c:\data\output.txt");

FileWriter hat auch einen Konstruktor, der 2 Parameter annimmt: Den Dateinamen und einen booleschen Wert. Der Boolesche Wert gibt an, ob eine vorhandene Datei angehängt oder überschrieben werden soll. Hier sind zwei Java FileWriter Beispiele, die das zeigen:

Writer fileWriter = new FileWriter("c:\data\output.txt", true); //appends to fileWriter fileWriter = new FileWriter("c:\data\output.txt", false); //overwrites file

FileWriter Character Encoding

Der FileWriter nimmt an, dass Sie die Bytes in der Datei mit der Standard-Zeichenkodierung für den Computer, auf dem Ihre Anwendung läuft, kodieren wollen. Das ist nicht immer das, was Sie wollen, und Sie können es nicht ändern!

Wenn Sie ein anderes Zeichenkodierungsschema angeben wollen, verwenden Sie kein FileWriter. Verwenden Sie stattdessen eine OutputStreamWriter auf einer FileOutputStream. Mit OutputStreamWriter können Sie das Zeichenkodierungsschema angeben, das beim Schreiben von Bytes in die zugrunde liegende Datei verwendet werden soll.

write(int)

Die Java-Methode FileWriter write(int) schreibt die unteren 16 Bit des int als einzelnes Zeichen in das Ziel, mit dem der FileWriter verbunden ist. Hier ein Beispiel für das Schreiben eines einzelnen Zeichens in ein Java FileWriter:

FileWriter fileWriter = new FileWriter("data/output.txt");fileWriter.write('A');

write(char)

Das Java FileWriter hat auch eine write(char)-Methode, die ein Array von Zeichen in das Ziel schreiben kann, mit dem das FileWriter verbunden ist. Die Methode write(char) gibt die Anzahl der tatsächlich in den FileWriter geschriebenen Zeichen zurück. Hier ein Beispiel für das Schreiben eines Arrays von Zeichen in einen Java FileWriter:

FileWriter fileWriter = new FileWriter("data/output.txt");char chars = new char{'A','B','C','D','E'};fileWriter.write(chars);

Schreibleistung

Es ist schneller, ein Array von Zeichen in einen Java FileWriter zu schreiben als ein Zeichen nach dem anderen. Der Geschwindigkeitszuwachs kann beträchtlich sein – bis zu 10 mal höher oder mehr. Daher wird empfohlen, wann immer möglich die write(char)-Methoden zu verwenden.

Der genaue Geschwindigkeitszuwachs hängt vom zugrunde liegenden Betriebssystem und der Hardware des Computers ab, auf dem Sie den Java-Code ausführen. Die Beschleunigung hängt von Faktoren wie der Speichergeschwindigkeit, der Festplattengeschwindigkeit und den Puffergrößen usw. ab.

Transparente Pufferung über BufferedWriter

Sie können eine transparente Pufferung von Bytes erreichen, die in einen Java FileWriter geschrieben werden, indem Sie ihn in einen Java BufferedWriter einpacken. Alle Bytes, die in den BufferedWriter geschrieben werden, werden zunächst in einem internen Byte-Array im BufferedWriter gepuffert. Wenn der Puffer voll ist, wird der Puffer auf einmal in den zugrunde liegenden FileWriter gespült. Hier ein Beispiel für die Einbettung eines Java-FileWriter in einen BufferedWriter:

int bufferSize = 8 * 1024;Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );

Mehr über den BufferedWriter erfahren Sie in meinem BufferedWriter-Tutorial.

flush()

Die flush()-Methode des Java-FileWriter spült alle in den FileWriter geschriebenen Daten in die zugrunde liegende Datei. Die Daten könnten irgendwo im Betriebssystemspeicher gepuffert sein, auch wenn Ihr Java-Code sie in den FileWriter geschrieben hat. Durch den Aufruf von flush() können Sie sicherstellen, dass alle gepufferten Daten auf die Festplatte übertragen (geschrieben) werden. Hier ein Beispiel für das Flushen von Daten, die in einen Java-FileWriter geschrieben wurden, indem dessen flush()-Methode aufgerufen wird:

fileWriter.flush();

Schließen eines FileWriters

Wenn Sie mit dem Schreiben von Zeichen in einen Java-FileWriter fertig sind, sollten Sie daran denken, ihn zu schließen. Das Schließen eines FileWriter erfolgt durch den Aufruf seiner close() Methode. So sieht das Schließen eines Java FileWriter aus:

fileWriter.close();

Sie können auch das in Java 7 eingeführte try-with-resources-Konstrukt verwenden. So sieht die Verwendung und das Schließen eines FileWriter mit dem try-with-resources-Konstrukt aus:

try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3");}

Leave a Reply