Bitte schauen Sie sich den folgenden Code an:
// A.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);
// B.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bWriter = new BufferedWriter(fileWriter);
Was ist der Unterschied zwischen diesen beiden Methoden?
Wann sollten wir PrintWriter über BufferedWriter verwenden?
quelle
PrintWriter
gibt mehr Methoden (println
), aber der wichtigste (und besorgniserregendste) Unterschied ist, dass es Ausnahmen verschluckt .Sie können
checkError
später anrufen, um zu sehen, ob Fehler aufgetreten sind. In der Regel werden Sie diese jedoch beispielsweisePrintWriter
zum Schreiben auf die Konsole verwenden - oder in "Quick 'n Dirty" -Apps, in denen Sie nicht durch Ausnahmen gestört werden möchten (und wo langfristige Zuverlässigkeit ist kein Problem).Ich bin mir nicht sicher , warum die „extra Formatierung Fähigkeiten“ und „nicht schlucken Ausnahmen“ Aspekte werden in die gleiche Klasse gebündelt - Formatierung ist offensichtlich nützlich in vielen Orten , an denen Sie keine Ausnahmen geschluckt werden sollen. Es wäre schön zu sehen, dass
BufferedWriter
ich irgendwann die gleichen Fähigkeiten bekomme ...quelle
PrintStream
ist einOutputStream
.PrintWriter
ist einWriter
.IOException
, dass jeder andere IO Abstraktion (Reader
,Writer
usw.) erklärt , dass seine Methoden werfen ,IOException
wenn etwas schief geht -PrintWriter
nicht der Fall ist.Wie in TofuBeers Antwort gesagt, haben beide ihre Spezialitäten. Um den vollen Nutzen von PrintWriter (oder einem anderen Writer) zu nutzen, aber auch gepuffertes Schreiben zu verwenden, können Sie den BufferedWriter wie folgt mit dem erforderlichen umschließen:
quelle
PrinterWriter
bereits eine erstelltBufferedWriter
.PrintWriter macht nur die Druckmethoden auf jedem Writer im Zeichenmodus verfügbar.
BufferedWriter ist nach seinen gepufferten Methoden effizienter als. Abhängig von Ihrer Systemplattform wird eine newLine () -Methode verwendet, um Textdateien korrekt zu bearbeiten.
Der BufferedReader ermöglicht das Lesen eines Textes aus einer Datei mit in Zeichen konvertierten Bytes. Es ermöglicht das zeilenweise Lesen.
Es gibt keinen PrintReader. Sie müssen eine andere Reader-Implementierung entsprechend dem Format Ihrer Eingabe auswählen.
quelle
PrintWriter ist der am besten verbesserte Writer zum Schreiben von Zeichendaten in eine Datei.
Der Hauptvorteil von PrintWriter gegenüber FileWriter und BufferedWriter ist:
PrintWriter printwriter = new PrintWriter("blah.txt");
(oder)
Wir können jede Art von primitiven Daten direkt in die Datei schreiben (da wir zusätzliche überladene Versionen der PrintWriter-Methoden haben, dh print () und println ()).
printwriter.print(65); //65
bufferedwriter.write(65); //A
printwriter.println(true); //true
quelle
Im Allgemeinen sendet ein Writer seine Ausgabe sofort an das zugrunde liegende Zeichen oder den Bytestream. Sofern keine sofortige Ausgabe erforderlich ist, ist es ratsam, einen BufferedWriter um einen Writer zu wickeln, dessen write () -Operationen kostspielig sein können, z. B. FileWriters und OutputStreamWriters. Beispielsweise,
Hinweis: Der Textinhalt in den Codeblöcken wird automatisch in Zeilenumbrüche umgewandelt
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
puffert die Ausgabe des PrintWriter in die Datei. Ohne Pufferung würde jeder Aufruf einer print () -Methode dazu führen, dass Zeichen in Bytes konvertiert werden, die dann sofort in die Datei geschrieben werden, was sehr ineffizient sein kann.
quelle
BufferedWriter - Schreibt Text in einen Ausgabezeichenstrom und puffert Zeichen aus einem Zeichenstrom. PrintWriter - Druckt formatierte Darstellungen von Objekten in einen Textausgabestream.
quelle
Ich denke, dass der Grund für die Verwendung von PrintWriter bereits oben erwähnt wurde, aber einer der wichtigen Gründe ist, dass Sie ein Dateiobjekt direkt an den PrintWriter-Konstruktor übergeben, was die Verwendung vereinfacht.
quelle