Pergunta

No aplicativo da web java, suponha que, se eu quiser obter o inseto de um arquivo XML, que é colocado no caminho de classe (ou seja, dentro do fontes pasta), como faço isso?

Foi útil?

Solução

ClassLoader.getResourceAsStream().

Conforme declarado no comentário abaixo, se você estiver em um multi-ClassLoader ambiente (como testes de unidade, webApps etc.) Você pode precisar usar Thread.currentThread().getContextClassLoader(). Ver http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388.

Outras dicas

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

Isso depende de onde exatamente está o arquivo XML. Está na pasta Fontes (no "pacote padrão" ou na "raiz") ou na mesma pasta que a classe?

No caso anterior, você deve usar "/file.xml"(Observe a barra principal) para encontrar o arquivo e não importa qual classe você usa para tentar localizá -lo.

Se o arquivo XML estiver próximo a alguma classe, SomeClass.class.getResourceAsStream() Com apenas o nome do arquivo é o caminho a percorrer.

ClassLoader.class.getResourceAsStream("/path/to/your/xml") E verifique se o seu script de compilação está copiando o arquivo XML para onde no seu caminho de classe.

SOMECLASSWITHINYOURSOURCEDIR.GETCLASS (). getResourceasStream ();

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

SOMECLASSWITHINYOURSOURCEDIR.CLASS.GETCLASSLOVER (). GetResourceasStream ("YourResource");

Eu tentei a solução proposta e a slash para a frente no nome do arquivo não funcionou para mim, exemplo: ... (). GetResourceasStream ("/my.properties"); Null foi devolvido

Removendo a barra funcionou: .... getResourceasStream ("my.properties");

Aqui está da DOC API: Antes da delegação, um nome de recurso absoluto é construído a partir do nome de 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'). 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top