Ce face PrintStream
PrintStream transformă orice valoare (numere, texte, obiecte) în text și o scrie într-un flux de octeți. System.out (ecranul) și System.err (mesajele de eroare) sunt obiecte PrintStream; de aceea scrii System.out.println(...).
Poți crea propriul PrintStream către un fișier: new PrintStream("raport.txt", StandardCharsets.UTF_8), și folosești aceleași metode ca pentru ecran. Spre deosebire de alte fluxuri, metodele lui nu aruncă IOException; erorile se verifică cu checkError().
Cu System.setOut(...) poți redirecționa tot ce afișează programul, de exemplu către un fișier sau către memorie în teste.
Parametri
| Parametru | Descriere |
|---|---|
numeFisier / iesire |
Fișierul sau fluxul în care se scrie. |
autoFlush |
Dacă true, golește buffer-ul la fiecare println. |
codare |
Setul de caractere, de exemplu StandardCharsets.UTF_8. |
Ce returnează
Un obiect PrintStream.
Exemple
Exemplul 1: Același cod scrie pe ecran sau în fișier
import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
public class Main {
static void bon(PrintStream out) {
out.println("Bon fiscal - Magazinul La Colț");
out.printf("%-10s %6.2f lei%n", "pâine", 4.50);
out.printf("%-10s %6.2f lei%n", "lapte", 7.90);
}
public static void main(String[] args) throws IOException {
bon(System.out);
try (PrintStream fisier = new PrintStream("bon.txt", StandardCharsets.UTF_8)) {
bon(fisier);
}
System.out.println("În fișier: " + Files.readAllLines(Path.of("bon.txt")).size() + " rânduri");
}
}
Rezultat
Bon fiscal - Magazinul La Colț
pâine 4.50 lei
lapte 7.90 lei
În fișier: 3 rânduri
Exemplul 2: Captarea afișărilor în memorie
Redirecționăm System.out către un ByteArrayOutputStream, apelăm o metodă care afișează, apoi refacem ieșirea normală.
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
public class Main {
static void saluta(String nume) {
System.out.println("Bună, " + nume + "!");
}
public static void main(String[] args) {
PrintStream original = System.out;
ByteArrayOutputStream memorie = new ByteArrayOutputStream();
System.setOut(new PrintStream(memorie, true, StandardCharsets.UTF_8));
saluta("Ioana");
System.setOut(original);
String captat = memorie.toString(StandardCharsets.UTF_8);
System.out.println("Am captat: " + captat.strip() + " (" + captat.length() + " caractere)");
}
}
Rezultat
Am captat: Bună, Ioana! (13 caractere)
Greșeli frecvente
- Creezi
new PrintStream("x.txt")fără codare: textul se scrie cu codarea implicită a sistemului. Dă explicitStandardCharsets.UTF_8. - Aștepți o excepție când scrierea eșuează (disc plin).
PrintStreamnu aruncă; verificăcheckError(). - Închizi
System.out(de exemplu cutry (PrintStream p = System.out)): după aceea nu mai apare nimic pe ecran.
Comenzi înrudite
PrintStream.println: println afișează o valoare și trece la rând nou; print o afișează și rămâne pe același rând.PrintStream.printf: Afișează text formatat după un șablon cu %s, %d, %.2f, %n: numere cu zecimale fixe, coloane aliniate.BufferedWriter: Scrie text eficient, adunându-l în memorie și trimițându-l în bucăți mari; write scrie text, newLine un sfârșit de rând.Files.writeString: Scrie un text într-un fișier (UTF-8): îl creează sau îl suprascrie; cu StandardOpenOption.APPEND adaugă la final.