2011-10-10 11 views
7

Sto sviluppando un'applicazione che utilizza una libreria che carica un file di configurazione come:Can getResourceAsStream() trova i file al di fuori del file jar?

InputStream in = getClass().getResourceAsStream(resource); 

mia domanda in poi confezionato in un file .jar. Se resource si trova nel file .jar, è possibile specificare il percorso come "/relative/path/to/resource/resource".

Mi piacerebbe sapere se è possibile trovare la risorsa se si trova all'esterno del file .jar e in questo caso, come specificare il percorso.

(Supponendo vaso della mia applicazione è in app/ e la risorsa è in app/config).


Il programma utilizza un 3 ° biblioteca partito. La libreria utilizza la risorsa come un file di configurazione.

Voglio anche modificare il file di configurazione senza dover decomprimere/zip il file jar tutto il tempo.

+0

@AndrewThompson La libreria utilizza la risorsa come un file di configurazione (è una libreria del party thrid). Voglio anche modificare il file di configurazione senza dover decomprimere/zip il file jar tutto il tempo. In realtà ho dimenticato di chiedere se potevo realizzare questo in un altro modo :) – kunigami

+0

Questa informazione è rilevante, quindi l'ho modificata nella domanda. L'API di terze parti può essere istruita (ad esempio dalla tua app.) Su dove cercare la risorsa? Fondamentalmente quello che sto portando a suggerire di non metterlo con l'app. del tutto, ma in un percorso stabile e riproducibile - come una sottodirectory di 'user.home'. –

+0

Ho appena notato il bit che dice "applet". È davvero un'applet? Ciò complica ulteriormente le cose. –

risposta

8

In generale, sì, è possibile. Tecnicamente, il codice ClassLoader della classe viene utilizzato per individuare la risorsa denominata nel parametro (see Javadoc here). Se non stai utilizzando uno speciale ClassLoader, otterrai il loader classe bootstrap, che ricerca il percorso della classe. Quindi, se si hanno directory o altri file jar sul classpath, verranno cercati.

1

Ottiene tutte le risorse disponibili per il classloader appropriato (quello restituito da getClass().getClassLoader()). Se il classloader include sia la directory appe, i file jar dipendono dal resto del contesto dell'applicazione.

0

C'è un modo per ottenere la directory corrente (How to get the path of a running JAR file?), ma per la configurazione si può semplicemente passare un -Dconfig.location alla JVM specificando un percorso assoluto per la configurazione

Problemi correlati