Properties na Conexão Banco

Boa tarde pessoal,

Eu criei um arquivo Sistema.config que no caso é Properties que armazeno os dados necessarios para o sistema fazer a conexão com BD.
Esta funcionando perfeitamente para aplicações quando rodo pelo eclipse, mais quando tento rodar pela Web ele não consegue encontrar o arquivo Properties.
Alguem sabe me informar porque ?

printStackTrace do Erro:

Erro ao abrir arquivo de configuracao: java.io.FileNotFoundException: sistema.config (O sistema não pode encontrar o arquivo especificado)
java.io.FileNotFoundException: sistema.config (O sistema não pode encontrar o arquivo especificado)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:106)
	at br.com.operacao.jdbc.Configurador.obterContexto(Configurador.java:25)
	at br.com.operacao.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:16)
	at br.com.operacao.jdbc.dao.FuncionarioDAO.<init>(FuncionarioDAO.java:25)
	at br.com.operacao.graficos.ContaNivelFuncionariosProducer.produceDataset(ContaNivelFuncionariosProducer.java:23)
	at de.laures.cewolf.taglib.DataContainer.getDataset(DataContainer.java:53)
	at de.laures.cewolf.taglib.SimpleChartDefinition.getDataset(SimpleChartDefinition.java:34)
	at de.laures.cewolf.taglib.SimpleChartDefinition.produceChart(SimpleChartDefinition.java:30)
	at de.laures.cewolf.taglib.AbstractChartDefinition.getChart(AbstractChartDefinition.java:121)
	at de.laures.cewolf.taglib.ChartImageDefinition.ensureRendered(ChartImageDefinition.java:137)
	at de.laures.cewolf.taglib.ChartImageDefinition.getSize(ChartImageDefinition.java:146)
	at de.laures.cewolf.CewolfRenderer.doGet(CewolfRenderer.java:153)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)

Em vez de ler seus dados a partir de um FileInputStream, pesquise sobre getResourceAsStream().

Ou seja, onde você fazia:

Properties prop = new Properties();
InputStream inps = new FileInputStream ("sistema.config");
prop.load (inps);
inps.close();

você deve copiar o arquivo “sistema.config” para o classpath da aplicação (tipicamente em /WEB-INF/classes) e fazer algo como:

Properties prop = new Properties();
InputStream inps = getClass().getClassLoader().getResourceAsStream ("/sistema.config");
prop.load (inps);
inps.close();

Eu copie o arquivo dentro do diretorio de classes mais apresentou o seguinte erro:

Exception in thread "main" java.lang.NullPointerException
	at java.util.Properties$LineReader.readLine(Properties.java:365)
	at java.util.Properties.load(Properties.java:293)
	at br.com.operacao.jdbc.Configurador.obterContexto(Configurador.java:28)
	at br.com.operacao.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:16)
	at br.com.operacao.jdbc.dao.FuncionarioDAO.<init>(FuncionarioDAO.java:25)
	at br.com.operacao.graficos.GraficoPizza.main(GraficoPizza.java:21)

A seguinte linha:

InputStream inps = getClass().getClassLoader().getResourceAsStream ("/sistema.config");

retorna null se ele não encontrou o resource.

Muitas vezes sua aplicação Web já tem um diretório para resources (como resources/application.properties no caso do Struts). Se for esse o caso, ponha o tal arquivo no mesmo diretório, e altere a referência para

(“resources/sistema.config”);

ou algo parecido.

Thingol,

Agora ele funcionou, mais somente pela Web. Quando tento rodar uma classe com metodo Main dentro do eclipse que faz acesso ao BD ele não acha o arquivo. Porque será?

Beleza, agora deu certo…