Estou tentando ler um arquivo .properties de uma pasta de meu projeto, exemplo br.com.projeto.strings
Estou usando o metodo “load” da Classe Properties, porem nao estou conseguindo enxergar o arquivo ao instanciar um objeto file
e com isso nao estou conseguindo ler ele.
Vai procurar o arquivo no diretorio que vc esta rodando o seu programa.
//Daniel
rafaduka
acho que ajuda:
packagebr.com.propertiesimportjava.io.IOException;importjava.io.InputStream;importjava.util.Properties;publicclassHandleProperties{privatePropertiesprops;privatestaticfinalStringFILE_NAME="/META-INF/file.properties";/** * Construtor padrão, para o path * * "/META-INF/file.properties" */publicHandleProperties(){InputStreamin=getClass().getResourceAsStream(FILE_NAME);try{loadProperties(in);}catch(IOExceptione){e.printStackTrace();}}/** * Construtor alternativo * * @param fileName Caminho onde está o properties alternativo */publicHandleProperties(StringfileName){InputStreamin=getClass().getResourceAsStream(fileName==null?FILE_NAME:fileName);try{loadProperties(in);}catch(IOExceptione){e.printStackTrace();}}privatevoidloadProperties(InputStreamin)throwsIOException{props=newProperties();props.load(in);in.close();}/** * * @param chave chave para consulta. * * @return Valor da correspondente chave */publicStringgetContent(Stringchave){returnprops.getProperty(chave).trim();}}
Na verdade a gente qdo nao consegue resolver um problema acaba entrando em “loop”.
Agradeço a ajuda de todos: nicocelli, rafaduka e widsofhell.
Ps. Rafaduka seu codigo ficou bem bacana, irei testar e dou feedback.
Abraços.
E
entanglement
Cheirinho de “programa que não vai funcionar quando você for gerar um jar e rodar fora do Eclipse ou Netbeans :(”
aechiara
acredito que depois vc vai querer ler de dentro de um JAR esse arquivo, certo ?
a mágica aí é fazer como disse o nosso amigo rafaduka, e utilizar o
getClass().getResourceAsStream(FILE_NAME);
onde o FILE_NAME seria o pacote junto com o nome do arquivo
nas IDEs (e mesmo com ANT ou Maven), quando vc faz o build, tudo que está no diretório src, vai parar no classes (ou equivalente para os binários), e provavelmente em um JAR/WAR/EAR … depende da sua aplicação, aí para lê-los vc deve usar o getResourceAsStream
cardosao
Testando e aviso se der certo.
Obrigado.
cardosao
Executei o codigo abaixo (uma cópia do rafaduka)
publicclassHandlerProperties{privatePropertiesprops;/** * Construtor alternativo * * @param fileName Caminho onde está o properties alternativo */publicHandlerProperties(StringfileName){InputStreamin=getClass().getResourceAsStream(fileName);try{loadProperties(in);}catch(IOExceptione){e.printStackTrace();}}privatevoidloadProperties(InputStreamin)throwsIOException{props=newProperties();props.load(in);in.close();}/** * * @param chave chave para consulta. * * @return Valor da correspondente chave */publicStringgetContent(Stringchave){returnprops.getProperty(chave).trim();}publicstaticvoidmain(String[]args){HandlerPropertieshp=newHandlerProperties("br.com.projeto.strings.pt_BR.properties");Stringnome=hp.getContent("botao");System.out.println(nome);}}
Coloque o arquivo “arquivo.properties” dentro da pasta criada;
Criar uma propriedade chamada “nome”;
Desta forma funcionou não só executando pelo eclipse mas também executando com um .jar que foi gerado. O .jar está em anexo.
E utilize o código assim:
importjava.io.IOException;importjava.io.InputStream;importjava.util.Properties;importjavax.swing.JOptionPane;publicclassHandleProperties{privatePropertiesprops;privatestaticfinalStringFILE_NAME="/META-INF/file.properties";/** * Construtor padrão, para o path * * "/META-INF/file.properties" */publicHandleProperties(){InputStreamin=getClass().getResourceAsStream(FILE_NAME);try{loadProperties(in);}catch(IOExceptione){e.printStackTrace();}}/** * Construtor alternativo * * @param fileName Caminho onde está o properties alternativo */publicHandleProperties(StringfileName){InputStreamin=getClass().getResourceAsStream(fileName==null?FILE_NAME:fileName);try{loadProperties(in);}catch(IOExceptione){e.printStackTrace();}}privatevoidloadProperties(InputStreamin)throwsIOException{props=newProperties();props.load(in);in.close();}/** * * @param chave chave para consulta. * * @return Valor da correspondente chave */publicStringgetContent(Stringchave){returnprops.getProperty(chave).trim();}publicstaticvoidmain(String[]args){HandlePropertieshp=newHandleProperties("/resource/arquivo.properties");Stringnome=hp.getContent("nome");JOptionPane.showMessageDialog(null,nome);}}