codestory

Die Anleitung zu Java PrintStream

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

1. PrintStream

PrintStream ist eine Unterklasse von FilterOutputStream, die verwendet wird, um Daten in einen von ihr verwalteten OutputStream zu drucken. Es wird auch als Werkzeug betrachtet, um diesem OutputStream die Funktionen hinzuzufügen.
Die Eigenschaften von PrintStream:
Alle Methode von PrintStream lösen keine Ausnahmen I/O aus. Um zu überprüfen, ob eine Ausnahme auftritt, können Sie die Methode checkError() aufrufen.
Optional ist PrintStream in der Lage, automatisch zu leeren, 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.
Alle von PrintStream gedruckten Zeichen werden durch die Verwendung der angegebenen encoding oder des charset oder der Systemvorgabe, wenn nicht angegeben, in bytes umgewandelt. Die Klasse sollt PrintWriter sollte in Fällen verwendet werden, in denen Zeichen anstelle von byte geschrieben werden müssen.
System.out
System.out ist ein sehr verbreitetes und bekanntes Objekt PrintStream, das zum Drucken von Daten auf dem Bildschirm Console verwendet wird. Es hilft Ihnen, sich an den klassischen Code zu erinnern, den Sie geschrieben haben, als Sie mit dem Erlernen von Java begonnen haben:
System.out.println("Hello World!");
Sehen Sie mehr:
PrintWriter ist eine Klasse ähnlich wie PrintStream, sie wird verwendet, um Daten an einen internen Writer oder OutputStream zu drucken, den sie verwaltet.

2. PrintStream Constructors

Die Konstruktoren zum Erstellen eines Objekts PrintStream ohne automatisches Spüllen (flush):
public PrintStream(OutputStream out)

public PrintStream(File file) throws FileNotFoundException
public PrintStream(File file, Charset charset) throws IOException
public PrintStream(File file, String csn)
                      throws FileNotFoundException, UnsupportedEncodingException

public PrintStream(String fileName) throws FileNotFoundException  
public PrintStream(String fileName, Charset charset) throws IOException
public PrintStream(String fileName, String csn)
                      throws FileNotFoundException, UnsupportedEncodingException
Die Konstruktoren zum Erstellen eines Objekts PrintStream mit einer automatischen Flush-Option:
public PrintStream(OutputStream out, boolean autoFlush)
public PrintStream(OutputStream out, boolean autoFlush, Charset charset)
public PrintStream(OutputStream out, boolean autoFlush, String encoding)
                                             throws UnsupportedEncodingException
Der Konstruktor erstellt einen PrintStream, um Daten in einen OutputStream zu schreiben:
public PrintStream(OutputStream out)
public PrintStream(OutputStream out, boolean autoFlush)  
public PrintStream(OutputStream out, boolean autoFlush, String encoding)
                                                                    throws UnsupportedEncodingException  
public PrintStream(OutputStream out, boolean autoFlush, Charset charset)
Die Konstruktoren erstellen einen PrintStream, um Daten in eine Datei zu schreiben
public PrintStream(File file)
public PrintStream(File file, Charset charset) throws IOException
public PrintStream(File file, String csn)
                            throws FileNotFoundException, UnsupportedEncodingException

public PrintStream(String fileName) throws FileNotFoundException  
public PrintStream(String fileName, Charset charset) throws IOException  
public PrintStream(String fileName, String csn)
                            throws FileNotFoundException, UnsupportedEncodingException

3. PrintStream Methods

Die Methode von PrintStream:
public boolean checkError()  
protected void setError()  
protected void clearError()  

public void print(boolean b)  
public void print(char c)  
public void print(int i)  
public void print(long l)  
public void print(float f)  
public void print(double d)
public void print(char[] s)  
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(int x)  
public void println(long x)
public void println(float x)  
public void println(double x)
public void println(char[] x)  
public void println(String x)  

public void println(Object x)  

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

public PrintStream format(String format, Object... args)  
public PrintStream format(Locale l, String format, Object... args)  

public PrintStream append(CharSequence csq)  
public PrintStream append(CharSequence csq, int start, int end)  
public PrintStream append(char c)
Andere Methoden überschreiben die Methoden der Elternklasse und lösen keine Ausnahme aus:
public void write(int b)  
public void write(byte[] b)  
public void write(byte[] b, int off, int len)  

public void flush()  
public void close()

4. Examples

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

import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;

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) {
        OutputStream baos = new ByteArrayOutputStream();

        // Create PrintStream via PrintStream(OutputStream) constructor.
        PrintStream pw = new PrintStream(baos);

        // Call method: Throwable.printStackTrace(PrintStream)
        t.printStackTrace(pw);
        pw.close();

        String s = baos.toString();
        return s;
    }
}
Output:
java.lang.ArithmeticException: / by zero
    at org.o7planning.printstream.ex.GetStackTraceEx.main(GetStackTraceEx.java:11)

5. checkError()

Die Methode checkError() gibt den Fehlerstatus dieses PrintStream zurück. Außerdem wird die Methode flush() auch aufgerufen, wenn der PrintStream nicht geschlossen wurde.
public boolean checkError()
Hinweis: Alle Methoden von PrintStream lösen keine IOException aus, aber sobald eine IOException innerhalb der Methoden auftritt, ist ihr Status Fehler.
Dieser Fehlerzustand von PrintStream wird nur gelöscht, wenn die Methode clearError() aufgerufen wird, aber diese Method ist protected (geschützt). Sie können eine Klasse schreiben, die PrintStream erweitert und diese Methode überschreiben, wenn Sie sie verwenden möchten (siehe Beispiel unten).
MyPrintStream.java
package org.o7planning.printstream.ex;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;

public class MyPrintStream extends PrintStream {

    public MyPrintStream(File file) throws FileNotFoundException {
        super(file);
    }
    
    @Override
    public void clearError()  {
        super.clearError();    // Call protected method.
    }
}
Beispiel: Verwenden Sie die Methode checkError(), um den Fehlerstatus von PrintStream zu überprüfen:
PrintStream_checkError_ex1.java
package org.o7planning.printstream.ex;

import java.io.File;

public class PrintStream_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);

        MyPrintStream mps = new MyPrintStream(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 zu drucken.
public void print(boolean b)  
public void print(char c)  
public void print(int i)  
public void print(long l)  
public void print(float f)  
public void print(double d)
public void print(char[] s)  
public void print(String s)
Zum Beispiel:
PrintStream_print_primitive_ex1.java
// System.out is an instance of PrintStream.
PrintStream ps = System.out;

ps.print(true);
ps.println();
ps.print(new char[] { 'a', 'b', 'c' });
ps.println();
ps.print("Text");
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 aus.
public void print(Object obj) {
   this.write(String.valueOf(obj));
}
Zum Beispiel:
PrintStream_print_object_ex1.java
// System.out is an instance of PrintStream.
PrintStream ps = System.out;

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);
Output:
null
Socket[unconnected]
[One, Two, Three]

8. println()

Drucken Sie das Zeilenumbruchzeichen (Newline character). Die Methode flush() wird auch aufgerufen, wenn der PrintStream über den Auto-Flush-Modus 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 zu drucken. Die Methode flush() wird auch aufgerufen, wenn der PrintStream über den Auto-Flush-Modus verfügt.
public void println(boolean x)  
public void println(char x)  
public void println(int x)  
public void println(long x)
public void println(float x)  
public void println(double x)
public void println(char[] x)  
public void println(String x)
Zum Beispiel:
PrintStream_println_primitive_ex1.java
// System.out is an instance of PrintStream.
PrintStream ps = System.out;

ps.println(true);

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

ps.println("Text");
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 aus. Die Methode flush() wird auch aufgerufen, wenn der PrintStream ü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:
PrintStream_println_object_ex1.java
// System.out is an instance of PrintStream.
PrintStream ps = System.out;

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

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

Object obj3 = Arrays.asList("One", "Two", "Three");
ps.println(obj3);
Output:
null
Socket[unconnected]
[One, Two, Three]

11. printf(..) *

Eine praktische Methode zum Schreiben einer formatierten Zeichenfolge in diesen PrintStream unter Verwendung der angegebenen Formatzeichenfolge und der angegebenen Argumente.
public PrintStream printf(String format, Object... args)  
public PrintStream printf(Locale locale, 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 PrintStream format(String format, Object... args)  
public PrintStream format(Locale locale, 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 dieser PrintStream zurückgegeben wird, sodass Sie eine nächste Methode aufrufen können, anstatt mit einem Semikolon ( ; ) zu enden.
public PrintStream append(CharSequence csq)  
public PrintStream append(CharSequence csq, int start, int end)  
public PrintStream append(char c)
Zum Beispiel:
PrintStream_append_ex1.java
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(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