Scrittura dell'Output sulla Console in Java

Concetti Chiave
  • Per scrivere output sulla console in Java, si possono utilizzare i metodi print() e println() della classe PrintStream, che è accessibile tramite System.out.
  • Un'alternativa più flessibile è la classe PrintWriter, che consente di scrivere output formattato e supporta lo svuotamento automatico dello stream.
  • Utilizzare PrintWriter è consigliato per applicazioni del mondo reale, poiché facilita l'internazionalizzazione del programma.
  • La classe PrintStream implementa il metodo write(), che può essere utilizzato per scrivere byte direttamente sulla console, ma è meno comune rispetto all'uso di print() e println().

Scrittura su Console

L'output della console si ottiene più facilmente con print() e println(), descritti in precedenza, che vengono utilizzati nella maggior parte degli esempi in questa guida.

Questi metodi sono definiti dalla classe PrintStream (che è il tipo di oggetto referenziato da System.out). Anche se System.out è un byte stream, utilizzarlo per l'output semplice del programma è ancora accettabile.

Tuttavia, esiste un'alternativa basata sui caratteri che studieremo in questa lezione.

Poiché PrintStream è un output stream derivato da OutputStream, implementa anche il metodo di basso livello write(). Quindi, write() può essere utilizzato per scrivere sulla console.

La forma più semplice di write() definita da PrintStream è mostrata qui:

void write(int byte_value)

Questo metodo scrive il byte specificato da byte_value sullo stream.

Anche se byte_value è dichiarato come un intero, vengono scritti solo gli otto bit meno significativi.

Ecco un breve esempio che utilizza write() per produrre in output il carattere "A" seguito da un ritorno a capo sullo schermo:

// Dimostra System.out.write()

class DemoScrittura {

    public static void main(String[] args) {

        int b;
        b = 'A';

        System.out.write(b);
        System.out.write('\n');
    }

}

Non utilizzeremo spesso write() per scrivere output su console (anche se farlo potrebbe essere utile in alcune situazioni) perché print() e println() sono sostanzialmente più facili da usare.

La Classe PrintWriter

Sebbene utilizzare System.out per scrivere sulla console sia accettabile, il suo uso è probabilmente migliore per scopi di debug o per programmi di esempio, come quelli che si trovano in questa guida.

Per programmi del mondo reale, il metodo raccomandato per scrivere sulla console quando si usa Java è attraverso uno stream PrintWriter. PrintWriter è una delle classi basate sui caratteri. Utilizzare una classe basata sui caratteri per l'output della console rende più facile l'internazionalizzazione del programma.

PrintWriter definisce diversi costruttori. Quello che utilizzeremo è mostrato qui:

PrintWriter(OutputStream outputStream, boolean flushingOn)

Qui, outputStream è un oggetto di tipo OutputStream, e flushingOn controlla se Java svuota lo stream di output ogni volta che viene chiamato un metodo println() (tra gli altri). Se flushingOn è true, lo svuotamento avviene automaticamente. Se false, lo svuotamento non è automatico.

PrintWriter supporta i metodi print() e println(). Pertanto, è possibile utilizzare questi metodi nello stesso modo in cui li si utilizzava con System.out. Se un argomento non è un tipo semplice, i metodi PrintWriter chiamano il metodo toString() dell'oggetto e poi visualizzano il risultato.

Per scrivere sulla console utilizzando un PrintWriter, bisogna specificare System.out per lo stream di output e lo svuotamento automatico. Ad esempio, questa riga di codice crea un PrintWriter che è collegato all'output della console:

PrintWriter pw = new PrintWriter(System.out, true);

La seguente applicazione illustra l'utilizzo di un PrintWriter per gestire l'output della console:

// Dimostrare PrintWriter

import java.io.*;

public class DemoPrintWriter {

    public static void main(String[] args) {
        PrintWriter pw = new PrintWriter(System.out, true);
        pw.println("Questa è una stringa");
        int i = -7;
        pw.println(i);
        double d = 4.5e-7;
        pw.println(d);
    }

}

L'output di questo programma è mostrato qui:

Questa è una stringa
-7
4.5E-7

Una cosa importante da ricordare è che non c'è niente di sbagliato nell'utilizzare System.out per scrivere semplice output di testo sulla console quando si sta imparando Java o facendo debug dei programmi.

Tuttavia, utilizzare PrintWriter rende le applicazioni del mondo reale più facili da internazionalizzare. Poiché non si ottiene alcun vantaggio utilizzando un PrintWriter nei programmi di esempio mostrati in questa guida, continueremo a utilizzare System.out per scrivere sulla console.