Pessoal, sabem se existe alguma forma fácil de pegar um valor contido em um arquivo .properties e utilizá-lo em um java bean?
Por exemplo, no meu .properties tenho:
mensagem=Erro ao gravar dados!
Quero pegar este valor e jogar em um atributo String por exemplo.
importjava.util.ResourceBundle;importjava.util.StringTokenizer;/** *Esta classe obtem as informações contidas no arquivo de configuração do *sistema representadas num arquivo "properties". *Este arquivo é definido como "constantes.properties" e é responsavel pelas variáveis do *sistema, como caminhos de diretórios, drive's de bando de dados * * */publicclassPropriedadesMd{privatestaticResourceBundle_bundle=null;/** * Obtem o arquivo de configurações no formato de leitura com a classe * ResourceBundle * @return ResourceBundle configurado com o properties "constantes.properties" */privatestaticResourceBundlegetResource(){if(_bundle==null){_bundle=ResourceBundle.getBundle(ConstantesMd.ARQUIVO_PROPERTIES);}return_bundle;}/** * Obtém o valor de chave no arquivo properties. * Obs.: Neste arquivo a forma de representação dos dados * é feita como "key=value". * @param key chave com o valor para ser pesquisado no properties * @return string com o valor contido no arquivo */publicstaticStringgetString(Stringkey){try{returngetResource().getString(key);}catch(Exceptione){System.err.print(e.getMessage());//SegurancaLog.registrarError(new PropriedadesMd() ,e.getMessage());}returnnull;}/** * Obtém o valor de chave no arquivo properties. Com uma função definida, * o retorno da valor é formatado com um StringTokenizer, separando este * valor um um array de String's pelo token ",". * * Com este exemplo definido no properties de um value assim: * Exemplo: key=value, value2, value3 * O retorno será de um array: * {"value", "value2", "value3"} * * Obs.: Neste arquivo a forma de representação dos dados * é feita como "key=value". * @param key chave com o valor para ser pesquisado no properties * @return string com o valor contido no arquivo */publicstaticString[]getStringArray(Stringkey){String[]retorno=null;try{Stringarray=getResource().getString(key);StringTokenizerst=newStringTokenizer(array,",");inttokens=st.countTokens();retorno=newString[tokens];for(inti=0;i<tokens;i++){retorno[i]=st.nextToken();}}catch(Exceptione){System.err.print(e.getMessage());//SegurancaLog.registrarError(new PropriedadesMd() ,e.getMessage());retorno=null;}returnretorno;}/** * Obtém o valor de chave no arquivo properties no formato de um integer. * Obs.: Neste arquivo a forma de representação dos dados * é feita como "key=value". * @param key chave com o valor para ser pesquisado no properties * @return int com o valor contido no arquivo e convertido para integer */publicstaticintgetInt(Stringkey){try{returnnewInteger(getResource().getString(key)).intValue();}catch(Exceptione){System.err.print(e.getMessage());//SegurancaLog.registrarError(new PropriedadesMd() ,e.getMessage());}return0;}/** * Obtém o valor de chave no arquivo properties no formato booleano. * Obs.: Neste arquivo a forma de representação dos dados * é feita como "key=value". * @param key chave com o valor para ser pesquisado no properties * @return boolean com o valor contido no arquivo e convertido para boolean, * "true" ou "false" */publicbooleangetBoolean(Stringkey){try{returnnewBoolean(getResource().getString(key)).booleanValue();}catch(Exceptione){System.err.print(e.getMessage());//SegurancaLog.registrarError(new PropriedadesMd() ,e.getMessage());}returnfalse;}}
ConstantesMd.java
publicclassConstantesMdimplementsSerializable{// Aqui é a referencia para o arquivo// O meu no caso é o constantes.properties que está no pacote resourcespublicstaticStringARQUIVO_PROPERTIES="resources.constantes";// Aqui é a declaraçao// Perceba que PropriedadesMd.getInt("mensagem") mensagem é o nome do// que você deu no seu arquivo properties e Mensagem é o o nome o qual // será identificado.publicstaticintMensagem=PropriedadesMd.getInt("mensagem");}
A chamada dentro de um JSP, por exemplo fica da seguinte forma:
<divid="foot"><%=ConstantesMd.Mensagem%></div>
Espero ter ajudado.
Abraço
G
gustavodelgado
Legal o tutorial… mas me gerou outra dúvida. Seguindo o tutorial, eu fiz:
Se eu tiver o arquivo Bundle.properties no hd, passando o caminho completo dele, tudo bem, consigo ler. Mas no meu caso, este arquivo está incluído no meu projeto web, ou seja, estará dentro do .war.
Como faço para pegar o caminho dele a partir da raiz do projeto?
Obrigado.
F
furutani
use o getClass().getResourceAsStream ("Bundle.properties");
Com ele vc obtem o arquivos que estao no classpath.
Tem exemplo aqui.
G
gustavodelgado
Properties properties = new Properties();
InputStream in = this.getClass().getResourceAsStream("Bundle.properties");
properties.load(in);
in.close();