In questi giorni mi sono imbattuto nel seguente problema:
ho realizzato una applicazione che fa uso di un file di properties, l'ho testata, tutto ok.
Esportata come jar, però, la mia applicazione ha smesso di funzionare perché il file properties risultava non trovato (FileNotFoundException). Strano no?
Il problema era evidentemente nel percorso del file...ma come fare a specificare un percorso relativo al contenuto del pacchetto jar?
Ho scoperto, con mia sorpresa, che ottenendo da un oggetto la sua classe di runtime è possibile invocare un metodo denominato getResourceAsStream(String name) che permette di ricercare una risorsa delegando tale compito al Class Loader che ha caricato la specifica classe. In questo modo la risorsa viene cercato nel contesto dell'applicazione, quindi nel mio caso all'interno del jar, ottenendo il risultato che cercavo. Ma vediamo il codice corrispondente, chiarirà ogni dubbio:
... Properties p = new Properties(); p.load(this.getClass().getResourceAsStream("/myApp.properties")); ...
il file "myApp.properties" verrà ricercato nella root dell'archivio jar.
Importate è sottolineare la presenza del carattere "/" che precede il nome file per riferire come percorso la root. In assenza di questo, infatti, il file viene ricercato all'interno del package che contiene la classe riferita con this nel codice di esempio.
Nessun commento:
Posta un commento