Originariamente inviato da Downloader
con rilascio di risorse io intendo che, devo lanciare il metodo close presente negli oggetti di tipo PrintStream e FileOutputStream, e mettere a null gli oggetti di tipo File e String, mentre i tipi primitivi (int, boolean...) restano invariati.
E' corretto?
Sì, è corretto. Se usi classi che usano a loro volta delle "risorse" e che offrono un metodo close() (o con nome diverso) allora nella tua classe che incapsula il tutto è assolutamente corretto e necessario che il close() (o chiudi() come hai detto tu) chiuda tutto ciò che sta "sotto" alla tua classe.

Originariamente inviato da Downloader
Mentre per quanto riguarda l'invocazione dell'eccezione...non so cosa fare.
La cosa più banale è un flag boolean, inizialmente a false, quando chiudi lo metti a true. È ovvio che true = già chiuso, quindi basta un test nei metodi.
Puoi anche usare come "flag" una delle risorse, es. il PrintStream che hai detto se sai/garantisci a priori che dopo la costruzione dell'oggetto c'è sicuramente. Al close lo annulli e già qui hai il "flag" ... se è null non è più usabile!