Obtendo o inputstream de um recurso de caminho de class (arquivo XML)

No aplicativo da Web Java, suponha que se eu quiser obter o InputStream de um arquivo XML, que é colocado no CLASSPATH (ou seja, dentro da pasta de fonts ), como faço isso?

ClassLoader.getResourceAsStream() .

Como indicado no comentário abaixo, se você estiver em um ambiente multi- ClassLoader (como teste de unidade, webapps etc.), talvez seja necessário usar Thread.currentThread().getContextClassLoader() . Consulte http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 .

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

Isso depende de onde exatamente o arquivo XML está. Está na pasta de fonts (no “pacote padrão” ou na “raiz”) ou na mesma pasta que a class?

No caso anterior, você deve usar ” /file.xml ” (observe a barra inicial) para localizar o arquivo e não importa qual class você usa para tentar localizá-lo.

Se o arquivo XML estiver ao lado de alguma class, SomeClass.class.getResourceAsStream() com apenas o nome do arquivo é o caminho a percorrer.

ClassLoader.class.getResourceAsStream("/path/to/your/xml") e certifique-se de que seu script de compilation está copiando o arquivo xml para onde em seu CLASSPATH.

someClassWithinYourSourceDir.getClass (). getResourceAsStream ();

Algumas das opções “getResourceAsStream ()” nesta resposta não funcionaram para mim, mas esta fez:

SomeClassWithinYourSourceDir.class.getClassLoader (). GetResourceAsStream (“yourResource”);

Por padrão, cada recurso adicionado ao caminho de class em um aplicativo da Web é copiado na pasta WEB-INF / classs no war implantado.

você pode gerenciar isso enquanto desenvolve o aplicativo no eclipse por meio de:

Clique com o botão direito do mouse em project -> properties -> Java Build Path -> guia Source -> pasta de saída padrão

Em seu servlet, você pode acessar o recurso prefixando seu caminho com ‘/’, que aponta para WEB-INF / classs .

Por exemplo, para acessar pdf-sample.pdf em WEB-INF / classs , você pode usar o seguinte:

 getClass().getResourceAsStream("/pdf-sample.pdf") 

Este tutorial explica muito bem as possíveis maneiras de ler um arquivo de resources do caminho de class em um aplicativo java, vale a pena ler.

Eu tentei solução proposta e barra no nome do arquivo não funcionou para mim, exemplo: … (). GetResourceAsStream (“/ my.properties”); null foi retornado

Removendo a barra funcionou: …. getResourceAsStream (“my.properties”);

Aqui está a partir da API doc: Antes da delegação, um nome de recurso absoluto é construído a partir do nome do recurso fornecido usando este 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').