Domanda

In applicazioni Web Java, Supponiamo che se voglio ottenere l'InputStream di un file XML, che si trova nel CLASSPATH (cioè all'interno delle fonti cartella), come faccio a fare?

È stato utile?

Soluzione

ClassLoader.getResourceAsStream() .

Come indicato nel commento qui sotto, se ci si trova in un ambiente multi-ClassLoader (come unit testing, webapps, ecc) potrebbe essere necessario utilizzare Thread.currentThread().getContextClassLoader(). Vedere http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 .

Altri suggerimenti

ClassLoader.class.getResourceAsStream("/path/file.ext");

Questo dipende da dove esattamente il file XML è. E 'nella cartella fonti (nel "pacchetto di default" o il "root") o nella stessa cartella della classe?

In per primo caso, è necessario utilizzare "/file.xml" (notare lo slash iniziale) per trovare il file e non importa quale classe si utilizza per cercare di individuarlo.

Se il file XML si trova accanto a qualche classe, SomeClass.class.getResourceAsStream() con solo il nome del file è la strada da percorrere.

ClassLoader.class.getResourceAsStream("/path/to/your/xml") e fare in modo che lo script di compilazione sta copiando il file xml dove nel classpath.

someClassWithinYourSourceDir.getClass () getResourceAsStream ();.

Alcuni dei "getResourceAsStream ()" opzioni in questa risposta non ha funzionato per me, ma questo fatto:

SomeClassWithinYourSourceDir.class.getClassLoader () getResourceAsStream ( "yourResource");.

ho provato proposto soluzioni e barra nel nome del file non ha funzionato per me, ad esempio:. ... () getResourceAsStream ( "/ my.properties"); nulla è stato restituito

La rimozione della barra ha funzionato: .... getResourceAsStream ( "my.properties");

Qui è da doc API:  Prima di delega, di un nome della risorsa assoluto è costruito il nome della risorsa usando questo algoritmo:

If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
Otherwise, the absolute name is of the following form:

    modified_package_name/name 

Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e'). 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top