MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Fluxuri formatabile de intrare și ieșire: PrintStream și PrintWriter

Clasa PrintStream

Clasa PrintStream este cea utilizată pentru a realiza ieșirea pe consolă. Când afișăm informații pe consolă folosind System.out.println(), de fapt folosim PrintStream, deoarece variabila out din clasa System reprezintă un obiect de tip PrintStream, iar metoda println() este o metodă a clasei PrintStream.

Totuși, PrintStream nu este util doar pentru ieșirea pe consolă. Putem utiliza această clasă și pentru a scrie informații în fluxuri de ieșire. Pentru aceasta, PrintStream definește o serie de constructori:

PrintStream(OutputStream outputStream)  
PrintStream(OutputStream outputStream, boolean autoFlushingOn)  
PrintStream(OutputStream outputStream, boolean autoFlushingOn, String charSet) throws UnsupportedEncodingException  
PrintStream(File outputFile) throws FileNotFoundException  
PrintStream(File outputFile, String charSet) throws FileNotFoundException, UnsupportedEncodingException  
PrintStream(String outputFileName) throws FileNotFoundException  
PrintStream(String outputFileName, String charSet) throws FileNotFoundException, UnsupportedEncodingException 

Parametrul outputStream este un obiect de tip OutputStream în care se va face scrierea. Parametrul autoFlushingOn cu valoarea true permite golirea automată a datelor în fluxul de ieșire. În mod implicit, acest parametru este setat la false. Parametrul charSet permite specificarea codării caracterelor.

Ca sursă pentru scrierea datelor, în loc de OutputStream, putem folosi un obiect File sau o cale de fișier sub formă de șir de caractere.

Pentru ieșirea informațiilor într-un flux de ieșire, PrintStream utilizează următoarele metode:

  • println(): ieșirea unei informații cu trecerea la o linie nouă
  • print(): ieșirea unei informații fără trecerea la o linie nouă
  • printf(): ieșire formatată

De exemplu, să scriem informații într-un fișier:

import java.io.*;

public class Program {

   public static void main(String[] args) {

       String text = "Hello World!"; // șir pentru scriere
       try (FileOutputStream fos = new FileOutputStream("C://SomeDir//notes3.txt");
            PrintStream printStream = new PrintStream(fos)) {

           printStream.println(text);
           System.out.println("Scrierea în fișier a fost realizată");
       } catch (IOException ex) {

           System.out.println(ex.getMessage());
       }
   }
}

În acest caz, folosim forma constructorului PrintStream care primește ca parametru un flux de ieșire: PrintStream(OutputStream out). De asemenea, am putea folosi și alte forme ale constructorului, specificând, de exemplu, un nume de fișier pentru scriere: PrintStream(String filename).

Ca flux de ieșire, se utilizează un obiect FileOutputStream. Metoda println() scrie informațiile în fluxul de ieșire, adică în obiectul FileOutputStream. (În cazul ieșirii pe consolă cu System.out.println(), fluxul de ieșire este consola).

De asemenea, ca orice flux de ieșire și moștenitor al clasei OutputStream, PrintStream are metoda write:

import java.io.*;

public class Program {

   public static void main(String[] args) {

       try (PrintStream printStream = new PrintStream("notes3.txt")) {

           printStream.print("Hello World!");
           printStream.println("Welcome to Java!");

           printStream.printf("Name: %s Age: %d \n", "Tom", 34);

           String message = "PrintStream";
           byte[] messageToBytes = message.getBytes();
           printStream.write(messageToBytes);

           System.out.println("Fișierul a fost scris");
       } catch (IOException ex) {

           System.out.println(ex.getMessage());
       }
   }
}

După executarea acestui program, fișierul va conține următorul text:

Hello World!Welcome to Java!
Name: Tom Age: 34 
PrintStream

Clasa PrintWriter

Similar cu PrintStream, există și clasa PrintWriter. Aceasta poate fi folosită atât pentru a afișa informații pe consolă, cât și pentru a scrie în fișiere sau alte fluxuri de ieșire. Clasa PrintWriter are mai mulți constructori:

  • PrintWriter(File file): adaugă automat informațiile în fișierul specificat
  • PrintWriter(File file, String csn): adaugă automat informațiile în fișierul specificat, utilizând codarea csn
  • PrintWriter(OutputStream out): utilizează un obiect OutputStream existent pentru a scrie informațiile, cu golirea automată a datelor
  • PrintWriter(OutputStream out, boolean autoFlush): utilizează un obiect OutputStream, al doilea parametru specifică dacă se golește automat fluxul
  • PrintWriter(String fileName): adaugă automat informațiile în fișierul specificat prin nume
  • PrintWriter(String fileName, String csn): adaugă automat informațiile în fișier utilizând codarea csn
  • PrintWriter(Writer out): utilizează un obiect Writer existent pentru a scrie informațiile
  • PrintWriter(Writer out, boolean autoFlush): al doilea parametru specifică dacă se golește automat fluxul Writer

PrintWriter implementează interfețele Appendable, Closeable și Flushable, așa că fluxul reprezentat de el trebuie închis după utilizare.

Pentru a scrie date în flux, se utilizează metodele printf() și println().

De exemplu, să folosim această clasă pentru ieșirea pe consolă:

try (PrintWriter pw = new PrintWriter(System.out)) {
   pw.println("Hello world!");
}

try (PrintWriter pw = new PrintWriter(System.out)) { pw.println("Hello world!"); }

Aici fluxul de ieșire este System.out, iar pe consolă va fi afișat șirul "Hello world!"

← Lecția anterioară Lecția următoare →