sabato 26 maggio 2012

Java e la redirezione

Salve :)
Eccomi qui con un nuovo post. Voglio parlare di una questione che ho affrontato pochi giorni fa.

In C in ambiente Unix è molto semplice fare la ridirezione di flussi come lo Standard I/O o lo Standard Error. In Java, come si può immaginare, è altrettanto semplice :)
Mi sono ritrovato ad utilizzare la ridirezione utilizzando delle librerie in un progetto. Era una libreria opensource per eseguire delle conversioni di manualistica che segue lo standard S1000D. Funziona bene, fa il suo sporco lavoro, ma sfortunatamente quando c'è qualcosa che non va invece di lanciare eccezioni, restituire qualcosa in particolare o qualsiasi altra cosa, scrive semplicemente sullo Standard IO l'eccezione avvenuta.
Questo fin quando la si utilizza da riga di comando è tranquillamente accettabile, ma quando la si utilizza attraverso un web service deployato sotto Axis fallisce "silenziosamente", infatti non è possibile visualizzare eventuali messaggi di errore.
Da bravo pigro e per sbrigarmi non sono stato a modificare i sorgenti della libreria, ma ho rididezionato l'I/O e gli errori su file.

E' un'operazione estremamente semplice, facile anche da cercare su google, ma visto che avevo voglia di scrivere un post, che non fosse troppo lungo o impegnativo, la riporto qui :)

I passi da seguire sono 2:
  1. Aprire un PrintStream sul file nel quale si desidera siano scritti i contenuti
  2. Settare il System.out affinchè utilizzi lo stream
Di seguito c'è un esempio su come ridirigere lo standard I/O e lo standard error su 2 file diversi:


PrintStream ioStream = new PrintStream(new File("IO.txt")); 
PrintStream errorStream = new PrintStream(new File("error.txt"));  


System.setOut(ioStream); 
System.setErr(errorStream);
 

Bene, un post intero per 4 righe di codice!
Ma avevo voglia di scrivere, cosa alquanto rara e non avevo voglia di scrivere niente di impegnativo :)

Nessun commento:

Posta un commento