devstory

Le Tutoriel de Java PrintWriter

View more Tutorials:

Suivez-nous sur notre fanpage pour recevoir des notifications chaque fois qu'il y a de nouveaux articles. Facebook

1- PrintWriter

PrintWriter est une sous-classe de Writer, qui est utilisée pour imprimer des données formatées dans un OutputStream ou un autre Writer qu'il gère.
Les caractéristiques de PrintWriter:
Toutes les méthodes de PrintWriter ne lèvent pas d'exceptions d'I/O, pour vérifier si l'exception s'est produite, vous pouvez appeler la méthode checkError().
En option, PrintWriter est capable d'auto-vider, ce qui signifie que la méthode flush() sera convoquée immédiatement après avoir convoqué println(..) ou au cours de l'impression d'un texte qui inclut le caractère '\n'.

2- PrintWriter Constructors

Les constructeurs pour créer l'objet PrintWriter sans vidage (flush) automatique:

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)
Les constructeurs pour créer un objet PrintWriter avec l'option de vidage (flush) automatique:

public PrintWriter​(OutputStream out, boolean autoFlush)    

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

public PrintWriter​(Writer out, boolean autoFlush)
Il existe de nombreux constructeurs pour initialiser un objet PrintWriter. Voir ce qui se passe lors de la création d'un PrintWriter dans certaines situations spécifiques:
PrintWriter​(Writer)
Créer un objet PrintWriter pour imprimer des données formatées dans un autre Writer.
PrintWriter​(OutputStream):
Créer un objet PrintWriter pour imprimer des données formatées dans un OutputStream.
PrintWriter​(File file) / PrintWriter​(String fileName)
Créer un objet PrintWriter pour imprimer des données formatées dans un fichier.
Si BufferedWriter participe à la structure de PrintWriter, les données seront écrites temporairement dans buffer (de BufferedWriter), qui sera poussé vers le bas pour cibler lorsque buffer est plein (voir l'illustration ci-dessus). Vous pouvez pousser de manière proactive les données dans la cible en appelant la méthode PrintWriter.flush().
Si PrintWriter est créé avec la fonction autoFlush activée, les données sont poussées dans la cible lorsque la méthode PrintWriter.println(..) ou PrintWriter.format(..) est appelée.

3- PrintWriter Methods

Les méthodes de 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

Obtenir la trace de la pile (stack trace) à partir d'une Exception.
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
Les méthodes PrintStream.printf(..) et PrintWriter.printf(..) sont les mêmes dans l'utilisation, vous pouvez vous référer à son utilisation dans l'article ci-dessous:

5- checkError()

La méthode checkError() renvoie l'état d'erreur de ce PrintWriter, et la méthode flush() est également convoquée si le PrintWriter n'a pas été fermé.

public boolean checkError()
Remarque : Toutes les méthodes PrintWriter ne donnent pas d'IOException, mais une fois qu'une IOException se produit dans les méthodes, son état est considéré comme une erreur.
L'état d'erreur de ce PrintWriter n'est effacé que si clearError() est convoqué, mais il s'agit d'une méthode protected. Vous pouvez écrire une classe qui étend PrintWriter et redéfinir cette méthode si vous souhaitez l'utiliser (Voir l'exemple ci-dessous).
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.
    }
}
Par exemple: Utiliser la methode checkError() pour vérifier l'état d'erreur du PrintWriter:
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(..) *

La méthode print(..) est utilisée pour imprimer une valeur primitive dans ce PrintWriter.

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) 
Par exemple:
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)

Convertir un objet en une String en utilisant la méthode String.valueOf(Object), et imprimer le résultat dans ce PrintWriter.

public void print(Object obj) {
   this.write(String.valueOf(obj));
}
Par exemple:
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()

Imprimer le caractère de nouvelle ligne sur ce PrintWriter. La méthode flush() est également appelée si le PrintWriter 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 dans ce PrintWriter. La méthode flush() est également convoquée si le PrintWriter dispose d'un mode de vidage automatique (auto flush).

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)  
Par exemple:
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)

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 dans ce PrintWriter. La méthode flush() est également appelée si le PrintWriter dispose d'un mode de vidage automatique. Cette méthode fonctionne comme appeler print(Object) puis println()

public void println(Object x) {
       this.write(String.valueOf(x));
       this.write("\n");
       if(this.autoFlush) this.flush();
}
Par exemple:
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(..) *

Une méthode pratique pour écrire une chaîne formatée dans ce PrintWriter à l'aide de la chaîne de format et des arguments spécifiés.

public PrintWriter printf​(String format, Object... args)  
public PrintWriter printf​(Locale l, String format, Object... args)
Cette méthode fonctionne de 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 aussi:

12- format(..) *

Cette méthode fonctionne comme la méthode printf(..).

public PrintWriter format​(String format, Object... args)  
public PrintWriter format​(Locale l, String format, Object... args) 
Elle fonctionne de 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 aussi:

13- append(..) *

Les méthodes append(..) fonctionnent comme les méthodes print(..), la seule différence est qu'elle renvoie ce PrintWriter. Vous pouvez donc continuer à convoquer la méthode suivante au lieu de terminer par un point-virgule ( ; )

public PrintWriter append​(char c)  
public PrintWriter append​(CharSequence csq)  
public PrintWriter append​(CharSequence csq, int start, int end) 
Par exemple:
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

View more Tutorials:

Peut-être que vous êtes intéressé

Voici des leçons en ligne à part du site web o7planning que nous recommandons. La liste comprend des leçons en ligne et celles en promo.