codestory

Die Anleitung zu Java PrintWriter

  1. PrintWriter
  2. PrintWriter Constructors
  3. PrintWriter Methods
  4. Examples
  5. checkError()
  6. print(..) *
  7. print(Object)
  8. println()
  9. println(..) *
  10. println(Object)
  11. printf(..) *
  12. format(..) *
  13. append(..) *

1. PrintWriter

PrintWriter ist eine Unterklasse von Writer, die zum Ausdrucken der formatierten Daten in einem OutputStream oder einem anderen Writer , die er verwaltet, benutzt wird.
Die Eigenschaft von PrintWriter:
Alle Methode von PrintWriter werfen keine Ausnahmen I/O. Um zu überprüfen, ob die Ausnahme aufgetreten ist, können Sie die Methode checkError() aufrufen.
Optional kann PrintWriter automatisch spülen (flush), was bedeutet, dass die Methode flush() sofort nach dem Aufruf von println(..) oder beim Drucken eines Textes aufgerufen wird, der das Zeichen '\n' enthält.

2. PrintWriter Constructors

Die Konstruktoren zum Erstellen des Objekts PrintWriter ohne automatisches Spülen:
public PrintWriter​(File file)    

public PrintWriter​(File file, String csn)    

public PrintWriter​(File file, Charset charset)    

public PrintWriter​(OutputStream out)  

public PrintWriter​(Writer out)  

public PrintWriter​(String fileName)    

public PrintWriter​(String fileName, String csn)    

public PrintWriter​(String fileName, Charset charset)
Die Konstruktoren zum Erstellen eines Objekts PrintWriter mit der Option von automatischen Spülen:
public PrintWriter​(OutputStream out, boolean autoFlush)    

public PrintWriter​(OutputStream out, boolean autoFlush, Charset charset)  

public PrintWriter​(Writer out, boolean autoFlush)
Es gibt viele Construktor, die das Objekt PrintWriter generiert. Schauen wir sich an, was bei der Erstellung eines PrintWriter in einiger konkreten Situationen passiert:
PrintWriter(Writer)
Erstellen Sie ein Objekt PrintWriter um die formatierten Daten in einem anderen Writer auszudrucken.
PrintWriter(OutputStream):
Erstellen Sie ein Objekt PrintWriter um eine formatierte Daten in einem OutputStream auszudrucken.
PrintWriter(File file) / PrintWriter(String fileName)
Erstelllen Sie ein Objekt PrintWriter um die formatierte Daten in einer Datei auszudrucken.
Wenn BufferedWriter der Struktur von PrintWriter beitritt, werden die Daten in buffer (von BufferedWriter) vorlaufend geschrieben und bei vollem buffer auf das Ziel geschoben (die Abbildung oben sehen). Sie können Daten aktiv in das Ziel übertragen, indem Sie die Methode PrintWriter.flush() aufrufen.
Wenn PrintWriter mit der aktivierten Funktion autoFlush erstellt wird, werden die Daten bei jedem Aufruf von der Methode PrintWriter.println(..) oder PrintWriter.format(..) in das Ziel geschoben.

3. PrintWriter Methods

Die Methode von PrintWriter:
Methods of PrintWriter
public PrintWriter append​(char c)  
public PrintWriter append​(CharSequence csq)  
public PrintWriter append​(CharSequence csq, int start, int end)  

public PrintWriter format​(String format, Object... args)  
public PrintWriter format​(Locale l, String format, Object... args)  

public PrintWriter printf​(String format, Object... args)  
public PrintWriter printf​(Locale l, String format, Object... args)

public boolean checkError()
protected void clearError()  
protected void setError()

public void print​(boolean b)  
public void print​(char c)  
public void print​(char[] s)
public void print​(double d)  
public void print​(float f)  
public void print​(int i)  
public void print​(long l)  
public void print​(String s)  

public void print​(Object obj)

public void println()  

public void println​(boolean x)  
public void println​(char x)  
public void println​(char[] x)  
public void println​(double x)
public void println​(float x)  
public void println​(int x)  
public void println​(long x)
public void println​(String x)  

public void println​(Object x)
Other methods override the methods of the parent class and do not throw an exception:
public void write​(char[] buf)
public void write​(char[] buf, int off, int len)
public void write​(int c)  
public void write​(String s)
public void write​(String s, int off, int len)

public void close()  
public void flush()

4. Examples

Rufen Sie den Stack-trace von einer Exception ab.
GetStackTraceEx.java
package org.o7planning.printwriter.ex;

import java.io.PrintWriter;
import java.io.StringWriter;

public class GetStackTraceEx {

    public static void main(String[] args) {
        try {
            int a = 100/0; // Exception occur here
        } catch(Exception e)  {
            String s = getStackTrace(e);
            System.err.println(s);
        }
    }
     
    public static String getStackTrace(Throwable t)  {
        StringWriter stringWriter = new StringWriter();
         
        // Create PrintWriter via PrintWriter(Writer) constructor.
        PrintWriter pw = new PrintWriter(stringWriter);
         
        // Call method: Throwable.printStackTrace(PrintWriter)
        t.printStackTrace(pw);
        pw.close();
         
        String s = stringWriter.getBuffer().toString();
        return s;
    }
}
Output:
java.lang.ArithmeticException: / by zero
    at org.o7planning.printwriter.ex.GetStackTraceEx.main(GetStackTraceEx.java:10)
PrintWriterEx1.java
package org.o7planning.printwriter.ex;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Locale;

public class PrintWriterEx1 {

    // Windows: C:/SomeFolder/pw-out-test.txt
    private static final String filePath = "/Volumes/Data/test/pw-out-test.txt";

    public static void main(String[] args) throws IOException {
        
        // Create a PrintWriter to write a file.
        PrintWriter printWriter = new PrintWriter(filePath);
        
        LocalDateTime now = LocalDateTime.now();
        
        String empName = "Tran";
        LocalDate hireDate = LocalDate.of(2000, 4, 23);  
        int salary = 10000;
        
        printWriter.printf("# File generated on %1$tA, %1$tB %1$tY %tH:%tM:%tS %n", now, now, now);
 
        printWriter.println(); // New line
        printWriter.printf("Employee Name: %s%n", empName);
        printWriter.printf("Hire date: %1$td.%1$tm.%1$tY %n", hireDate);
        printWriter.printf(Locale.US, "Salary: $%,d %n", salary);

        printWriter.close();
    }
}
Output:
pw-out-test.txt
# File generated on Thursday, February 2021 01:31:22

Employee Name: Tran
Hire date: 23.04.2000
Salary: $10,000
Die zwei Methode PrintStream.printf(..) und PrintWriter.printf(..) sind ähnlich bei der Verwendungsweise. Sie können ihre Verwendungsweise in diesem Artikel studieren.

5. checkError()

Die Methode checkError() gibt den Fehlerzustand dieses PrintWriter zurück, und die Methode flush() wird auch aufgerufen, wenn dieser PrintWriter nicht geschlossen wurde.
public boolean checkError()
Hinweis: Alle Methoden von PrintWriter lösen keine IOException aus, aber sobald eine IOException innerhalb der Methoden auftritt, wird ihr Status als Fehler betrachtet.
Der Fehlerzustand dieses PrintWriter wird nur gelöscht, wenn die Methode clearError() aufgerufen wird, aber dies ist eine protected Methode. Sie können eine Klasse schreiben, die PrintWriter erweitert und diese Methode überschreiben, wenn Sie sie verwenden möchten (siehe Beispiel unten).
MyPrintWriter.java
package org.o7planning.printwriter.ex;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class MyPrintWriter extends PrintWriter {

    public MyPrintWriter(File file) throws FileNotFoundException {
        super(file);
    }
    
    @Override
    public void clearError()  {
        super.clearError();    // Call protected method.
    }
}
Beispiel: Verwenden Sie die Methode checkError(), um den Fehlerzustand des PrintWriter zu überprüfen:
PrintWriter_checkError_ex1.java
package org.o7planning.printwriter.ex;

import java.io.File;

public class PrintWriter_checkError_ex1 {

    // Windows: C:/SomeFolder/logFile.txt
    private static final String logFilePath = "/Volumes/Data/test/logFile.txt";

    public static void main(String[] args) throws Exception {
        File logFile = new File(logFilePath);

        MyPrintWriter mps = new MyPrintWriter(logFile);
        int errorCount = 0;
        while (true) {
            // Write log..
            mps.println("Some Log..");
            Thread.sleep(1000);

            // Check if IOException happened.
            if (mps.checkError()) {
                errorCount++;
                mps.clearError();
                if (errorCount > 10) {
                    sendAlertEmail();
                    break;
                }
            }
        }
        mps.close();
    }

    private static void sendAlertEmail() {
        System.out.println("There is a problem in the Log system.");
    }
}

6. print(..) *

Die Methode print(..) wird verwendet, um einen primitiven Wert in diesen PrintWriter zu drucken.
public void print​(boolean b)  
public void print​(char c)  
public void print​(char[] s)
public void print​(double d)  
public void print​(float f)  
public void print​(int i)  
public void print​(long l)  
public void print​(String s)
Zum Beispiel:
PrintWriter_print_primitive_ex1.java
Writer swriter = new StringWriter();
PrintWriter ps = new PrintWriter(swriter);

ps.print(true);
ps.println();
ps.print(new char[] { 'a', 'b', 'c' });
ps.println();
ps.print("Text");

System.out.println(swriter.toString());
Output:
true
abc
Text

7. print(Object)

Konvertieren Sie ein Objekt mit der Methode String.valueOf(Object) in einen String und geben Sie das Ergebnis an diesen PrintWriter aus.
public void print(Object obj) {
   this.write(String.valueOf(obj));
}
Zum Beispiel:
PrintWriter_print_object_ex1.java
Writer writer = new StringWriter();
PrintWriter ps = new PrintWriter(writer);

Object obj1 = null;
ps.print(obj1);
ps.println();

Object obj2 = new Socket();
ps.print(obj2);
ps.println();

Object obj3 = Arrays.asList("One", "Two", "Three");
ps.print(obj3);

String content = writer.toString();
System.out.println(content);
Output:
null
Socket[unconnected]
[One, Two, Three]

8. println()

Geben Sie das Zeilenumbruchzeichen in diesem PrintWriter aus. Die Methode flush() wird auch aufgerufen, wenn der PrintWriter über den Auto-FlushSpülen-Modus (auto Flush) verfügt.
public void println() {
    print('\n');
    if(autoFlush) this.flush();
}

9. println(..) *

Die Methode println(..) wird verwendet, um einen primitiven Wert und ein Zeilenumbruchzeichen in diesen PrintWriter zu drucken. Die Methode flush() wird auch aufgerufen, wenn der PrintWriter über den Auto-Spülen-Modus verfügt.
public void println​(boolean x)  
public void println​(char x)  
public void println​(char[] x)  
public void println​(double x)
public void println​(float x)  
public void println​(int x)  
public void println​(long x)
public void println​(String x)
Zum Beispiel:
PrintWriter_println_primitive_ex1.java
OutputStream baos = new ByteArrayOutputStream();
PrintWriter ps = new PrintWriter(baos);

ps.println(true);  
ps.println(new char[] { 'a', 'b', 'c' });  
ps.println("Text");
ps.flush();

String content = baos.toString();
System.out.println(content);
Output:
true
abc
Text

10. println(Object)

Konvertieren Sie ein Objekt mit der Methode String.valueOf(Object) in einen String und geben Sie dann das Ergebnis und das Zeilenumbruchzeichen in diesen PrintWriter aus. Die Methode flush() wird auch aufgerufen, wenn der PrintWriter über den Auto-Flush-Modus verfügt. Diese Methode funktioniert wie der Aufruf von print(Object) und dann println().
public void println(Object x) {
       this.write(String.valueOf(x));
       this.write("\n");
       if(this.autoFlush) this.flush();
}
Zum Beispiel:
PrintWriter_println_object_ex1.java
Writer swriter = new StringWriter();
PrintWriter ps = new PrintWriter(swriter);

Object obj1 = null;
ps.println(obj1);

Object obj2 = new Socket();
ps.println(obj2);

Object obj3 = Arrays.asList("One", "Two", "Three");
ps.println(obj3);

String content = swriter.toString();
System.out.println(content);
Output:
null
Socket[unconnected]
[One, Two, Three]

11. printf(..) *

Eine praktische Methode zum Schreiben einer formatierten Zeichenfolge in diesen PrintWriter durch die Verwendung der angegebenen Formatzeichenfolge und der angegebenen Argumente.
public PrintWriter printf​(String format, Object... args)  
public PrintWriter printf​(Locale l, String format, Object... args)
Diese Methode funktioniert ähnlich wie der folgende Code:
String result = String.format(format, args);
printStream.print(result);
 
// Or:
String result = String.format(locale, format, args);
printStream.print(result);
Sehen Sie mehr:

12. format(..) *

Diese Methode funktioniert wie die Methode printf(..).
public PrintWriter format​(String format, Object... args)  
public PrintWriter format​(Locale l, String format, Object... args)
Es funktioniert wie der folgende Code:
String result = String.format(format, args);
printStream.print(result);
 
// Or:
String result = String.format(locale, format, args);
printStream.print(result);
Sehen Sie mehr:

13. append(..) *

Die Methoden append(..) funktionieren wie die Methoden print(..), der einzige Unterschied besteht darin, dass sie diesen PrintWriter zurückgeben. Sie können also auch weiterhin die nächste Methode aufrufen, anstatt mit einem Semikolon ( ; ) zu enden.
public PrintWriter append​(char c)  
public PrintWriter append​(CharSequence csq)  
public PrintWriter append​(CharSequence csq, int start, int end)
Zum Beispiel:
PrintWriter_append_ex1.java
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintWriter ps = new PrintWriter(baos);

ps.append("This").append(" is").append(' ').append('a').append(" Text");
ps.flush();

String text = baos.toString();
System.out.println(text);// This is a Text

Die Anleitungen Java IO

Show More