Die Java FileWriter-Klasse java.io.FileWriter
ermöglicht das Schreiben von Zeichen in eine Datei. In dieser Hinsicht funktioniert der Java FileWriter ähnlich wie der FileOutputStream
, außer dass ein FileOutputStream
bytebasiert ist, während ein FileWriter
zeichenbasiert ist. Das FileWriter
soll mit anderen Worten Text schreiben. Ein Zeichen kann je nach verwendetem Zeichencodierungsschema einem oder mehreren Bytes entsprechen. 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 aus Gründen der Übersichtlichkeit übersprungen. Weitere Informationen zur korrekten Ausnahmebehandlung finden Sie unter Java IO Exception Handling.
Der FileWriter
hat auch andere Konstruktoren, mit denen Sie die zu schreibende Datei auf verschiedene Arten angeben können. Weitere Informationen finden Sie im offiziellen JavaDoc.
Überschreiben vs. Anhängen der Datei
Wenn Sie eine Java FileWriter
erstellen, können Sie entscheiden, ob Sie eine vorhandene Datei mit demselben Namen überschreiben oder an eine vorhandene Datei anhängen möchten. Sie entscheiden, dass durch die Wahl, was FileWriter
Konstruktor Sie verwenden.
Der FileWriter
Konstruktor, der nur einen Parameter, den Dateinamen, verwendet, überschreibt alle vorhandenen Dateien:
Writer fileWriter = new FileWriter("c:\data\output.txt");
FileWriter
hat einen Konstruktor, der auch 2 Parameter akzeptiert: 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
Das FileWriter
setzt voraus, dass Sie die Bytes in die Datei mit der Standardzeichencodierung für den Computer codieren möchten, auf dem Ihre Anwendung ausgeführt wird. Dies ist möglicherweise nicht immer das, was Sie wollen, und Sie können es nicht ändern!
Wenn Sie ein anderes Zeichencodierungsschema angeben möchten, verwenden Sie kein FileWriter
. Verwenden Sie stattdessen eine OutputStreamWriter
auf einer FileOutputStream
. Mit OutputStreamWriter
können Sie das Zeichencodierungsschema angeben, das beim Schreiben von Bytes in die zugrunde liegende Datei verwendet werden soll.
write(int)
Die Java-Methode FileWriter
write(int)
schreibt das untere 16-Bit von int
als einzelnes Zeichen an das Ziel, mit dem FileWriter
verbunden ist. Hier ist 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)
Die Java FileWriter
hat auch eine write(char)
Methode, die ein Array von Zeichen an das Ziel schreiben kann, mit dem FileWriter
verbunden ist. Die Methode write(char)
gibt die Anzahl der tatsächlich in FileWriter
geschriebenen Zeichen zurück. Hier ist ein Beispiel für das Schreiben eines Arrays von Zeichen in ein 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-Dateischreiber zu schreiben, als jeweils ein Zeichen zu schreiben. Die Beschleunigung kann ziemlich signifikant sein – bis zu 10 x höher oder mehr. Daher wird empfohlen, wann immer möglich die write(char)
-Methoden zu verwenden.
Die genaue Beschleunigung 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 Problemen wie Speichergeschwindigkeit, Festplattengeschwindigkeit und Puffergrößen usw. ab.
Transparente Pufferung über BufferedWriter
Sie können eine transparente Pufferung von Bytes erhalten, die in ein Java FileWriter
geschrieben wurden, indem Sie es in einen Java BufferedWriter . Alle in den BufferedWriter
geschriebenen Bytes werden zuerst in einem internen Byte-Array im BufferedWriter
gepuffert. Wenn der Puffer voll ist, wird der Puffer auf einmal auf den zugrunde liegenden FileWriter
geleert. Hier ist ein Beispiel für das Umschließen eines Java FileWriter
in a BufferedWriter
:
int bufferSize = 8 * 1024;Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );
Sie können mehr über die BufferedWriter
in meinem BufferedWriter Tutorial lesen.
flush()
Die flush()
-Methode von Java FileWriter
löscht alle in FileWriter
geschriebenen Daten in die zugrunde liegende Datei. Die Daten werden möglicherweise irgendwo im Betriebssystemspeicher gepuffert, selbst wenn Ihr Java-Code sie in FileWriter
geschrieben hat. Durch den Aufruf von flush()
können Sie sicherstellen, dass alle gepufferten Daten auf die Festplatte geschrieben werden. Hier ist ein Beispiel für das Leeren von Daten, die in ein Java FileWriter
geschrieben wurden, indem die flush()
-Methode aufgerufen wird:
fileWriter.flush();
Schließen eines FileWriter
Wenn Sie mit dem Schreiben von Zeichen in ein Java FileWriter
fertig sind, sollten Sie daran denken, es zu schließen. Das Schließen eines FileWriter
erfolgt durch Aufrufen seiner close()
-Methode. So sieht das Schließen eines Java FileWriter
aus:
fileWriter.close();
Sie können auch das in Java 7 eingeführte Konstrukt try-with-resources . So verwenden und schließen Sie ein FileWriter
-Objekt mit dem Konstrukt try-with-resources:
try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3");}