Ler um arquivo properties

Olá pessoal ,

vou criar um arquivo de mensagem.properties

onde vou colocar mensagem de erro pra poder logar

e gravar no banco de dados …

Minha duvida alguém teria uma rotina pra ler este

arquivo properties do diretorio que vou colocar

e como vai ler a mensagem de erro do arquivo .

exemplo:

mens_erro = “Mensagem de Erro.”
mens_0001 = “Cliente não encontrado.”
mens_0002 = “Cliente já cadastrado.”

Se alguém puder me ajudar agradeceria …

abs

Use a classe PropertyResourceBundle. O construtor dela recebe um InputStream, o qual deve estar atrelado ao seu arquivo “.properties”.
Daí vc pode utilizar o método getKeys() que te retorna um Enumeration e também o getString(String key) para recuperar os valores das entradas do properties

Crie duas classes:

1ª classe:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropertiesLoader {

    private Properties props;
    private String nomeDoProperties = "SEU ARQUIVO.properties";

    protected PropertiesLoader(){
            props = new Properties();
            InputStream in = this.getClass().getResourceAsStream(nomeDoProperties);
            try{
                    props.load(in);
                    in.close();
            }
            catch(IOException e){e.printStackTrace();}
    }

    protected String getValor(String chave){
            return (String)props.getProperty(chave);
    }
}

2ª classe:

public class PropertiesLoaderImpl {
    
    private static PropertiesLoader loader = new PropertiesLoader();
    
    public static String getValor(String chave){
            return (String)loader.getValor(chave);
    }

}

Para ler uma variavel que está dentro do SEU ARQUIVO.properties:

PropertiesLoaderImpl.getValor("SUA VARIAVEL")

[quote=marceloplis]Crie duas classes:

1ª classe:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropertiesLoader {

    private Properties props;
    private String nomeDoProperties = "SEU ARQUIVO.properties";

    protected PropertiesLoader(){
            props = new Properties();
            InputStream in = this.getClass().getResourceAsStream(nomeDoProperties);
            try{
                    props.load(in);
                    in.close();
            }
            catch(IOException e){e.printStackTrace();}
    }

    protected String getValor(String chave){
            return (String)props.getProperty(chave);
    }
}

2ª classe:

public class PropertiesLoaderImpl {
    
    private static PropertiesLoader loader = new PropertiesLoader();
    
    public static String getValor(String chave){
            return (String)loader.getValor(chave);
    }

}

Para ler uma variavel que está dentro do SEU ARQUIVO.properties:

PropertiesLoaderImpl.getValor("SUA VARIAVEL") [/quote]

Legal…eu gostaria de saber como fazer para imprimir as váriaveis (ou informações) dentro do seu properties… :shock:

Akumaldo,
Acho que a abordagem do marceloplis impede isso…
Uma solução mais trivial, sem envolver a criação de uma classe para fazer o carregamento das variáveis do arquivo properties, poderia ser assim:

/*Leitura do arquivo properties*/
FileInputStream fis = new FileInputStream(yourPropertiesFile);
Properties props = new Properties();
try{
	props.load(fis);
	fis.close();
}catch(IOException e){
	e.printStackTrace();
}

/*Leitura das variáveis no Properties props*/
for(Enumeration elms = props.propertyNames(); elms.hasMoreElements;){
	String prop = (String)elms.nextElement();
	syso(prop + ": " + props.getProperty(prop));
	syso(elms.hasMoreElements() ? "\n" : "");
}

Espero ter ajudado. Qq coisa, poste mais, ok?

[quote=Mantu]Akumaldo,
Acho que a abordagem do marceloplis impede isso…
Uma solução mais trivial, sem envolver a criação de uma classe para fazer o carregamento das variáveis do arquivo properties, poderia ser assim:

/*Leitura do arquivo properties*/
FileInputStream fis = new FileInputStream(yourPropertiesFile);
Properties props = new Properties();
try{
	props.load(fis);
	fis.close();
}catch(IOException e){
	e.printStackTrace();
}

/*Leitura das variáveis no Properties props*/
for(Enumeration elms = props.propertyNames(); elms.hasMoreElements;){
	String prop = (String)elms.nextElement();
	syso(prop + ": " + props.getProperty(prop));
	syso(elms.hasMoreElements() ? "\n" : "");
}

Espero ter ajudado. Qq coisa, poste mais, ok?[/quote]

não entendi como ele faz a leitura das variáveis…podia explicar melhor?? :oops:

obrigado

Como funciona um arquivo “properties”:

Diferentemente do Windows (onde existem as APIs “GetPrivateProfileString” e “SetPrivateProfileString”), no Java um arquivo “properties” deve ser lido de uma vez só (com “load”) e carregado na memória como um objeto do tipo Properties, e escrito de uma vez só (com “store”).

(O Windows também faz isso, mas esconde o fato de você).

O tipo Properties funciona como se fosse uma tabela onde você passa a chave e obtém um valor, usando o método “getProperty”.

Hummmmmmmm estou tendo problemas para acessar as variáveis dentro do arquivo…será que to fazendo certinho???

public class TestProperties {

	public static void main(String[] args) {
		System.out.print(PropertiesLoaderImpl.getValor("NOME"));

	}

}

Esse foi o código que usei para testar…
e criei um teste.properties no e:\ da minha maquina…

Essas são as exceptions disparadas:
java.lang.ExceptionInInitializerError
java.lang.NullPointerException

Dentro do teste.properties tem só uma linha de teste assim:

NOME = “bruno”

tá errado? aonde estou errando??
obrigado a todos :slight_smile:

Cara, para imprimir o que está no seu .properties faz a chamada:

PropertiesLoaderImpl.getValor("SUA VARIAVEL");

Ex: Arquivo.properties{nome=Zé Mané}

no seu .java:{System.out.println("nome = "+PropertiesLoaderImpl.getValor("nome"));}

resultado = nome = Zé Mané

[quote=marceloplis]Cara, para imprimir o que está no seu .properties faz a chamada:

[code]
PropertiesLoaderImpl.getValor(“SUA VARIAVEL”);

Ex: Arquivo.properties{nome=Zé Mané}

no seu .java:{System.out.println("nome = "+PropertiesLoaderImpl.getValor(“nome”));}

resultado = nome = Zé Mané
[/code][/quote]

Na linha de execução coloco isso???:
.java:{System.out.println("nome = "+PropertiesLoaderImpl.getValor(“nome”));}

[quote=akumaldo]
Na linha de execução coloco isso???:
.java:{System.out.println("nome = "+PropertiesLoaderImpl.getValor(“nome”));}[/quote]

Vc pode colocar assim no seu .java:

import pacote_onde_colocou_as_classes.*;

System.out.println("nome = "+PropertiesLoaderImpl.getValor(“nome”));
ou
String nome = PropertiesLoaderImpl.getValor(“nome”);
System.out.println("nome = "+nome);

Boa noite Galera !

Pessoal desculpe ressuscitar esse tópico antigo, mas procurei algo e não achei nada…

A minhha dúvida é parecida, mas com uma diferença, eu quero ler o properties fora do jar.

No projeto como esta funciona bem só que o meu configuration.properties esta dentro do jar, na raiz do projeto.
Agora tenho a necessidade de deixar o .properties fora para que possa mudar as configurações sem ter que abrir o jar.

Com o .properties dentro e na raiz do jar, eu leio assim:

private static ResourceBundle bundle = ResourceBundle.getBundle("configuration");

Tentei assim, mas ele da um erro que não encontra o arquivo:

private static ResourceBundle bundle = ResourceBundle.getBundle("/export/home/projeto/configuration");

Nessa opção o jar esta neste mesmo diretório.

Obrigado.

[]s