devstory

Le Tutoriel de 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 est une sous-classe de FilterOutputStream qui est utilisée pour imprimer des données dans un OutputStream qu'elle gère. Elle est également considérée comme un outil permettant d'ajouter des fonctionnalités à cet OutputStream.
Les caractéristiques de PrintStream :
Toutes les méthodes de PrintStream ne lancent pas d'exceptions d'I/O. Pour vérifier si une exception se produit, vous pouvez convoquer la méthode checkError().
En option, PrintStream est capable de vider automatiquement, ce qui signifie que la méthode flush() sera convoquée immédiatement après la convocation de println(..) ou lors de l'impression d'un texte qui inclut le caractère '\n'.
Tous les caractères imprimés par PrintStream sont convertis en bytes en utilisant l'encoding ou charset donné, ou la valeur par défaut du système s'il n'est pas spécifié. La classe PrintWriter doit être utilisée dans les cas où il est nécessaire d'écrire des caractères au lieu de bytes.
System.out
System.out est un objet PrintStream très courant et familier, qui est utilisé pour imprimer des données sur l'écran de la Console. Il vous aide à vous souvenir du code classique que vous avez écrit lorsque vous avez commencé à apprendre Java :
System.out.println("Hello World!");
Voir plus :
PrintWriter est une classe similaire à PrintStream, qui est utilisée pour imprimer des données vers un Writer interne ou OutputStream qu'elle gère.

2. PrintStream Constructors

Les constructeurs pour créer un objet PrintStream sans le vidage (flush) automatique :
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
Les constructeurs pour créer un objet PrintStream avec une option de vidage (flush) automatique :
public PrintStream(OutputStream out, boolean autoFlush)
public PrintStream(OutputStream out, boolean autoFlush, Charset charset)
public PrintStream(OutputStream out, boolean autoFlush, String encoding)
                                             throws UnsupportedEncodingException
Les constructeurs créent un PrintStream pour écrire des données dans un OutputStream :
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)
Les constructeurs créent un PrintStream pour écrire des données dans un fichier :
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

Les méthodes de 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)
Les autres méthodes remplacent (override) les méthodes de la classe parente et ne lancent pas d'exception :
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

Obtenir la trace de la pile (stack trace) à partir d'une Exception.
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()

La méthode checkError() renvoie l'état d'erreur de ce PrintStream. De plus, la méthode flush() est également appelée si le PrintStream n'a pas été fermé.
public boolean checkError()
Remarque : Toutes les méthodes de PrintStream ne lancent pas d'IOException, mais une fois qu'une IOException se produit dans les méthodes, son état est une erreur.
Cet état d'erreur de PrintStream n'est effacé que si clearError() est convoqué, mais il s'agit d'une méthode protected. Vous pouvez écrire une classe qui étend PrintStream et remplacer cette méthode si vous souhaitez l'utiliser (Voir l'exemple ci-dessous).
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.
    }
}
Exemple : Utiliser la méthode checkError() pour vérifier l'état d'erreur de PrintStream :
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(..) *

La méthode print(..) est utilisée pour imprimer une valeur primitive.
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)
Par exemple :
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)

Convertir un objet en String à l'aide de la méthode String.valueOf(Object) et imprimer le résultat.
public void print(Object obj) {
   this.write(String.valueOf(obj));
}
Par exemple :
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()

Imprimer le caractère de nouvelle ligne. La méthode flush() est également convoquée si le PrintStream dispose d'un mode de vidage automatique (auto flush).
public void println() {
    print('\n');
    if(autoFlush) this.flush();
}

9. println(..) *

La méthode println(..) est utilisée pour imprimer une valeur primitive et un caractère de nouvelle ligne. La méthode flush() est également appelée si le PrintStream a un mode de vidage automatique (auto flush).
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)
Par exemple :
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)

Convertir un objet en String à l'aide de la méthode String.valueOf(Object), puis imprimer le résultat et le caractère de nouvelle ligne. La méthode flush() est également convoquée si le PrintStream a un mode de vidage automatique (auto flush). Cette méthode fonctionne comme lorsque print(Object) puis println() sont convoqués.
public void println(Object x) {
       this.write(String.valueOf(x));
       this.write("\n");
       if(this.autoFlush) this.flush();
}
Par exemple :
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(..) *

Une méthode pratique permettant d'écrire une chaîne formatée dans ce PrintStream à l'aide de la chaîne de format et des arguments spécifiés.
public PrintStream printf(String format, Object... args)  
public PrintStream printf(Locale locale, String format, Object... args)
Cette méthode fonctionne de la même manière que le code ci-dessous :
String result = String.format(format, args);
printStream.print(result);

// Or:
String result = String.format(locale, format, args);
printStream.print(result);
Voir plus :

12. format(..) *

Cette méthode fonctionne comme la méthode printf(..).
public PrintStream format(String format, Object... args)  
public PrintStream format(Locale locale, String format, Object... args)
Cela fonctionne comme le code ci-dessous :
String result = String.format(format, args);
printStream.print(result);

// Or:
String result = String.format(locale, format, args);
printStream.print(result);
Voir aussi :

13. append(..) *

Les méthodes append(..) fonctionnent comme les méthodes print(..). La seule différence est qu'il renvoie ce PrintStream, vous pouvez donc convoquer une méthode qui suit au lieu de terminer par un point-virgule ( ; ).
public PrintStream append(CharSequence csq)  
public PrintStream append(CharSequence csq, int start, int end)  
public PrintStream append(char c)
Par exemple :
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

Tutoriels Java IO

Show More