Guarda che le classi per trattare i file in Java sono quasi un centinaio...
In pratica ognuna di occupa di un aspetto particolare, quindi spesso ti tocca "incapsularle" una nell'altra per svolgere un compito preciso.
In particolare, PrintWriter si occupa di rendere i valori delle variabili in una forma "leggibile", cioe' in caratteri ASCII anziche' in binario, come fa System.out (che pero', per ragioni di compatibilita' non appartiene alla classe PrintWriter)