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