Como carregar um arquivo de configuração XML com FileInputStream, mas recebendo um FileNotFoundException

StackOverflow https://stackoverflow.com/questions/2211991

Pergunta

O meu caminho de construção no Eclipse parece com isso:

ProjectName
   -- WEB-INF
      -- classes
         -- myClass.class
      -- configs
         -- myConfig.xml

O meu caminho absoluto para a configuração atualmente se parece com isso:

C: \ Desenvolvimento \ Java \ ProjectName \ WEB-INF \ configs \ myConfig.xml

Eu estou usando JAXB para a ligação, e ele está esperando um FileInputStream. O FileInputStream precisa ser um fluxo para o arquivo de configuração XML. No entanto, eu não consigo descobrir como obter o FileInputStream para minha configuração, e eu continuo recebendo um FileNotFoundException.

Eu quero esta configuração a ser carregado de maneira tal que alguém não tem que codificar o caminho para a configuração porque eu pretendo lançar o projeto open source. Eu vejo um monte de exemplos em que alguém apenas hardcodes o caminho absoluto completo, mas eu preciso que ele seja algo mais flexível "como" isso:

new FileInputStream ( "/ WEB-INF / configs / myConfig.xml");

Obrigado!

Foi útil?

Solução

Eu recomendo colocar esse myConfig.xml no diretório WEB-INF / classes vez e carregá-lo através do carregador de classe, uma vez que é no classpath. Chamando getResourceAsStream () no contexto do servlet irá retornar um InputStream que você pode usar. É relativo à raiz do contexto, para que possa pegar esse WAR e colocá-lo em qualquer lugar -. Seu código será ainda trabalho

Outras dicas

Você pode obter o fluxo de entrada de caminhos relativos em WEB-INF facilmente com o método ServletContext.getResourceAsStream() (javadoc aqui ) e suas variantes.

Por exemplo, em seu código selvlet você pode fazer isso:

getServletContext().getResourceAsStream("/WEB-INF/configs/myConfig.xml") // your file
getServletContext().getResource("/WEB-INF") // URL to WEB-INF dir
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top