Localização dos arquivos de propriedades

10 respostas
W

Tenho a seguinte hierarquia de diretórios:

1-br/com/ctech/utils/.class --> os class fazem parte do pacote br.com.ctech.utils
2-/agenda/jsp/
.jsp --> paginas jsp que estao no diretorio ROOT do tomcat

Criei um arquivo db.properties com as propriedades de acesso ao banco de dados que eh utilizado pela classe ConectaBancoDados.java. O db.properties estah em br/com/ctech/utils/. No entanto, quando rodo minha aplicacao jsp a seguinte excessao eh lancada: java.io.FileNotFoundException: db.properties (No such file or directory). Esseh eh o codigo que faz referencia ao arquivo:
FileInputStream fis = new FileInputStream(“db.properties”);

Em qual diretorio eu devo colocar o arquivo de propriedades ou como chamar ele na aplicação? Estou usando a plataforma Linux.

Obrigado,

10 Respostas

thiagorani

Coloque assim:

FileInputStream arquivo = new FileInputStream(System.getProperty("catalina.base")+"/webapps/suaplicacao/br/com/ctech/utils/db.properties");
L

especificando apenas o nome do arquivo vc está indicando que ele está no mesmo diretório que o seu jsp. Para resolver vc pode passar o path completo para o arquivo.
E para passar o caminho completo do arquivo vc pode utilizar

FileInputStream fis = new FileInputStream( application.getRealPath( "/WEB-INF/classes/br/com/ctech/utils/db.properties" ) );

Obs.: o application no jsp é um objeto implicito que implementa a interface javax.servlet.ServletContext

flw

W

“lap_junior”:
especificando apenas o nome do arquivo vc está indicando que ele está no mesmo diretório que o seu jsp. Para resolver vc pode passar o path completo para o arquivo.
E para passar o caminho completo do arquivo vc pode utilizar

FileInputStream fis = new FileInputStream( application.getRealPath( "/WEB-INF/classes/br/com/ctech/utils/db.properties" ) );

Obs.: o application no jsp é um objeto implicito que implementa a interface javax.servlet.ServletContext

flw


Entendi…mas quem faz referência ao arquivo não eh o jsp, mas sim a classe ConectaBancoDados.class. Essa sim eh chamada pelo jsp.

W

“lap_junior”:
especificando apenas o nome do arquivo vc está indicando que ele está no mesmo diretório que o seu jsp. Para resolver vc pode passar o path completo para o arquivo.
E para passar o caminho completo do arquivo vc pode utilizar

FileInputStream fis = new FileInputStream( application.getRealPath( "/WEB-INF/classes/br/com/ctech/utils/db.properties" ) );

Obs.: o application no jsp é um objeto implicito que implementa a interface javax.servlet.ServletContext

flw


Funciou…obrigado pela dica.
Aproveitando…para se fazer referência a um arquivo de entrada em FileInputStream eh sempre necessário indicar o caminho completo desde a raiz do sistema?

L

Isso mesmo, sei que está na classe, mas quem está utilizando a classe é o JSP por isto o arquivo está sendo procurado no mesmo diretório onde ele ( JSP ) está.

Isso pq quando vc instancia a sua classe vc não está mudando o diretório, está apenas utilizando um outro recurso.

Não sei se consegui ser claro o suficiente.

blz

W

“lap_junior”:
especificando apenas o nome do arquivo vc está indicando que ele está no mesmo diretório que o seu jsp. Para resolver vc pode passar o path completo para o arquivo.
E para passar o caminho completo do arquivo vc pode utilizar

FileInputStream fis = new FileInputStream( application.getRealPath( "/WEB-INF/classes/br/com/ctech/utils/db.properties" ) );

Obs.: o application no jsp é um objeto implicito que implementa a interface javax.servlet.ServletContext

flw


Funciou…obrigado pela dica.
Aproveitando…para se fazer referência a um arquivo de entrada em FileInputStream eh sempre necessário indicar o caminho completo desde a raiz do sistema?

L

“wendell almeida silva”:

Funciou…obrigado pela dica.
Aproveitando…para se fazer referência a um arquivo de entrada em FileInputStream eh sempre necessário indicar o caminho completo desde a raiz do sistema?

É a mesma coisa, não é… mas se vc não especificar vc pode ter problemas quando for procurar o arquivo, como aconteceu com sua classe.

flw

W

“thiagorani”:
Coloque assim:

FileInputStream arquivo = new FileInputStream(System.getProperty("catalina.base")+"/webapps/suaplicacao/br/com/ctech/utils/db.properties");

Funcionou perfeitamente essa solução. Obrigado.

N

Para não se fixar ao catalina, ou a algum recurso do sistema operacional, e resolvendo de forma elegante, o ServletContext tem um método desenvolvido exatamente para essa tarefa.

InputStream ServletContext.getResourceAsStream(String myPropertyFile)

A String passada como parâmetro deve começar com “/” que representa o contexto da aplicação, ou melhor, do servlet.

:slight_smile:

W

“net_sandro”:
Para não se fixar ao catalina, ou a algum recurso do sistema operacional, e resolvendo de forma elegante, o ServletContext tem um método desenvolvido exatamente para essa tarefa.

InputStream ServletContext.getResourceAsStream(String myPropertyFile)

A String passada como parâmetro deve começar com “/” que representa o contexto da aplicação, ou melhor, do servlet.

:)


O que seria o contexto da aplicação? Então dessa forma a String pode ser somente o nome do arquivo. Mas eu devo colocar o arquivo junto ao diretorio da classe que faz referencia ao InputStream ou junto ao jsp que utiliza esta classe?

Criado 8 de março de 2004
Ultima resposta 9 de mar. de 2004
Respostas 10
Participantes 4