Manca un close() (e per sicurezza un flush() prima), che è da fare in modo appropriato sfruttando try-finally, perché IOException può uscire fuori dal metodo
P.S. Comunque il metodo è un po' "pasticciato", è un mix di logica e I/O.
EDIT: anzi, no per il finally, perché PrintWriter nasconde le eccezioni.