Wie kann man in eine Textdatei schreiben?
Verfahren bis Java 6
import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.nio.file.Files; import java.nio.file.Path; public class DateiSchreibenClass { public static void main(String[] args) { printConventionally(); } private static void printConventionally() { PrintWriter pWriter = null; String s = "/Users/jo/Desktop/test.txt"; try { pWriter = new PrintWriter(new FileWriter(s)); pWriter.println("Hallo Welt!"); } catch (IOException ioe) { ioe.printStackTrace(); } finally { if (pWriter != null) { pWriter.flush(); pWriter.close(); } } } }
In der main()
-Methode des Beispiels befindet sich
ein try-catch-Block, der dazu dient, eventuelle Fehler bei
Ausführung der kaskadierten Datenströme abzufangen.
Das PrintWriter
-Objekt erwartet als Parameter einen
OutputStream, der hier durch ein neu gebildetes FileWriter
-Objekt
gegeben ist1. Abhängig von der
zugrunde liegenden Platform erzeugt er ggfs. die als
Parameter-String angegebene Datei, falls diese nicht bereits
existieren sollte. Der FileWriter
wird durch einen
BufferedWriter
gekapselt. Ohne diese Pufferung
würde jeder Aufruf der Methode print()
die
Konvertierung eines Zeichens in ein byte verlangen - eine
kostspielige Angelegenheit!
Die Methode println()
schreibt schließlich den
übergebenen String zunächst in einen internen Puffer,
der durch flush()
freigegeben wird und den Inhalt
in die Datei schreibt. Hierbei werden evtl. bereits vorhandene
Dateiinhalte gelöscht. Durch Übergabe eines zweiten boolean
-Parameters
an den Konstruktor des PrintWriter
kann der Puffer
bei Aufruf der Methoden printf(), println
oder format()
automatisch geschrieben werden. Ein gesonderter Aufruf von flush()
ist dann nicht mehr nötig.
PrintWriter pWriter = new PrintWriter(new FileWriter("test.txt"), true);
Wird bei der Objektbildung true
als zweiter
Parameter an den Konstruktor des FileWriters übergeben,
wird die Ausgabedatei nicht überschrieben, sondern der Text
am Ende angehängt:
PrintWriter pWriter = new PrintWriter(new FileWriter("test.txt", true), true);
Verfahren ab Java 7
v.7In Java 1.7 wurde das try-with-resources-Statement eingeführt, das die Schreibarbeit bei Datenströmen etwas verringerte. Zudem erfolgt das Schließen des Stroms automatisch. Der folgende Quelltext zeigt die Anwendung.
private static void printJava7() { String s = "/Users/jo/Desktop/test.txt"; try (PrintWriter pWriter = new PrintWriter(new FileWriter(s));){ pWriter.println("Hallo Welt!"); } catch (IOException ioe) { ioe.printStackTrace(); } }
Verfahren ab Java 11
v.11Mit Java 1.7 wurden mit dem
Package java.nio
(nio = new input/output) neue
Möglichkeiten eröffnet, um Eingabe- und
Ausgabe-Operationen zu handhaben. Ab Java 11 wurden dann der
Klasse java.nio.Files
u.a. die statischen Methoden
writeString()
und readString()
hinzugefügt, die die benötigen Writer bzw Reader
kapseln. Der Quelltext demonstriert deren Anwendung.
private static void printJava11() { Path p = Path.of("/Users/jo/Desktop/test.txt"); try { Path filePath = Files.writeString(p, "Hallo Welt!"); String s = Files.readString(filePath); System.out.println(s); } catch (IOException e) { e.printStackTrace(); } }
1) In Java 1.5 kann dem PrintWriter
der Dateinamens-String direkt übergeben werden, statt ein File
-Objekt
zu verwenden.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.