Arquivo .properties usando variavel

12 respostas
rollei

Como faco para fazer um arquivo properties que possa ter uma variavel na mensagem? Sem precisar fazer uma funcao para substituir um caractere na string

± assim:

arquivo.properties

msg.to.pessoa.contatos=Ola $VARIAVEL, seja bem vindo ao sistema

12 Respostas

Rafael_Steil

Utilize o jakarta commons-configurations. A sintaxe é ${variavel}

Rafael

rollei

no site da apache o exemplo que eles dao:

application.name = Killer App
application.version = 1.6.2

application.title = ${application.name} ${application.version}

utiliza "variaveis" do proprio arquivo properties, eu estava querendo trocar essas variaveis em tempo de execucao dentro de um metodo. como faco?

[]'s

Rafael_Steil

Basta adiciona-las :slight_smile: depois de carregar o arquivo. Nao tem segredo.

Rafael

Jair_Rillo_Junior

Eu precisei fazer isso a muito tempo atrás, e na época eu usei o Velocity para fazer essa troca de variáveis por conteúdo dinamico.

rollei
propertie
planos.nome.plano=
planos.nome.acao=
planos.nome.responsavel=
planos.nome.lider=
planos.data.ultimo.acompanhamento=
planos.msg.acompanhamento.atrasado=\
Bom dia, \n\n\
O Plano de Ação "${nome.plano}" precisa ter seu andamento informado, mediante acompanhamento inserido via Sistema Planos, na medida/atividade descrita a seguir:\n\n\
"${nome.acao}"\n\
   -Nome do responsávl: ${nome.responsavel}\n\
   -Nome do líder do plano: ${nome.lider} \n\
   -Data do último acompanhamento:  ${data.ultimo.acompanhamento} \n\n\
Para inserir um acompanhamento em uma Medida/Atividade de um Plano de Ação acesse o Sistema Planos, selecione o menu "Planos de Ação" e em seguida o sub-menu "Acompanhamento".\n\n\n\
Atenciosamente,\n\n\
  Coordenadoria de Tecnologia da Informação - COTEC
helper
package br.gov.ce.seplag.cronmail.utils;

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

public class PropertiesHelper implements Serializable {
    private static final long serialVersionUID = 1533667673359633782L;

    /**
     * Store for each propertie file, a instance of java.util.Properties.
     */
    private Hashtable<String, Properties> propertyFiles = null;
    /**
     * Singleton Instance.
     */
    private static PropertiesHelper instance = null;

    /**
     * Private Constructor, for implementing a singleton pattern.
     */
    private PropertiesHelper() {
    }

    /**
     * Return the instance for the Resource Bundle.
     * @return The singleton instance.
     */
    public static synchronized PropertiesHelper getInstance() {

        if (instance == null) {
            instance = new PropertiesHelper();
        }
        return instance;
    }

    /**
     * Loads the properties file.
     * @param fileName - File name of the property file.
     */
    private void loadPropertiesFile(final String fileName) {

        Properties prop;

        // tests if the properties is null.
        if (propertyFiles == null) {
            propertyFiles = new Hashtable<String, Properties>();
        }

        try {
            // Gets the classloader for the container
            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

            if (classLoader == null) {
                classLoader = getClass().getClassLoader();
            }
            InputStream input = classLoader.getResourceAsStream(fileName);
            if (input != null) {
                prop = new Properties();

                try {
                    prop.load(input);
                    propertyFiles.put(fileName, prop);

                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Returns the property name the propery name.
     * @param rscBdlFileName - The property file name.
     * @param propName - The property name.
     * @return - The property value.
     */
    public String getProperty(final String rscBdlFileName, final String propName) {

        Properties prop = null;
        String propValue = null;

        // Verify if the propety file was loaded
        if (propertyFiles == null || propertyFiles.get(rscBdlFileName) == null) {
            loadPropertiesFile(rscBdlFileName);
        }

        if (propertyFiles != null && propertyFiles.get(rscBdlFileName) != null) {
            prop = propertyFiles.get(rscBdlFileName);
            propValue = prop.getProperty(propName);

            if (propValue == null) {
                return "";
            }
        }

        return propValue;
    }
    
    public void setProperty (final String rscBdlFileName, final String propName, final String propValue) {
        Properties prop = null;
        
        // Verify if the propety file was loaded
        if (propertyFiles == null || propertyFiles.get(rscBdlFileName) == null) {
            loadPropertiesFile(rscBdlFileName);
        }
        

        if (propertyFiles != null && propertyFiles.get(rscBdlFileName) != null) {
            prop = propertyFiles.get(rscBdlFileName);
            prop.setProperty(propName, propValue);
        }
    }
}
chamada ao metodo:
String configPropertiesFile = "messages.properties";
                PropertiesHelper configProperties = PropertiesHelper.getInstance();

                configProperties.setProperty(configPropertiesFile, "planos.nome.plano", nomePlano.toUpperCase());
                configProperties.setProperty(configPropertiesFile, "planos.nome.acao", nomeAcao.toUpperCase());
                configProperties.setProperty(configPropertiesFile, "planos.nome.responsavel", responsavel.toUpperCase());
                configProperties.setProperty(configPropertiesFile, "planos.nome.lider", nomeLider);
                configProperties.setProperty(configPropertiesFile, "planos.data.ultimo.acompanhamento", dataAuxStr);

                String msgAcompanhamentoAtrasado = configProperties.getProperty(configPropertiesFile, "planos.msg.acompanhamento.atrasado");

a mensagem esta vindo assim:

Bom dia,

O Plano de Ação "${nome.plano}" precisa ter seu andamento informado, mediante acompanhamento inserido via Sistema Planos, na medida/atividade descrita a seguir:

"${nome.acao}"
-Nome do responsávl: ${nome.responsavel}
-Nome do líder do plano: ${nome.lider}
-Data do último acompanhamento: ${data.ultimo.acompanhamento}

Para inserir um acompanhamento em uma Medida/Atividade de um Plano de Ação acesse o Sistema Planos, selecione o menu "Planos de Ação" e em seguida o sub-menu "Acompanhamento".

Atenciosamente,

Coordenadoria de Tecnologia da Informação - COTEC

que estou fazendo errado? jah adicionei a commons-configuration no meu projeto

**EDIT**

-_- ... quando eu postei aqui percebi que os nomes das variaveis tao diferentes no propertie :/ ... vou mudar :~

rollei

continua nao atualizando as variaveis do propertie:

planos.nome.plano= planos.nome.acao= planos.nome.responsavel= planos.nome.lider= planos.data.ultimo.acompanhamento= planos.msg.acompanhamento.atrasado=\ Bom dia, \n\n\ O Plano de Ação "${planos.nome.plano}" precisa ter seu andamento informado, mediante acompanhamento inserido via Sistema Planos, na medida/atividade descrita a seguir:\n\n\ "${planos.nome.acao}"\n\ -Nome do responsávl: ${planos.nome.responsavel}\n\ -Nome do líder do plano: ${planos.nome.lider} \n\ -Data do último acompanhamento: ${planos.data.ultimo.acompanhamento} \n\n\ Para inserir um acompanhamento em uma Medida/Atividade de um Plano de Ação acesse o Sistema Planos, selecione o menu "Planos de Ação" e em seguida o sub-menu "Acompanhamento".\n\n\n\ Atenciosamente,\n\n\ Coordenadoria de Tecnologia da Informação - COTEC

agora sim, que fiz de errado?

rollei
Z

Talvez possa utilizar “MessageFormat” para o que quer.
É possível fazer isso:

Object[] arguments = {
     new Integer(7),
     new Date(System.currentTimeMillis()),
     "a disturbance in the Force"
 };

 String result = MessageFormat.format(
     "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
     arguments);

output: At 12:30 PM on Jul 3, 2053, there was a disturbance
in the Force on planet 7.

Falow…

rollei

cara, precisa de mais alguma coisa, alem de adicionar o jar no projeto? fiz igual tem no exemplo da apache e quando eu mando imprimir ele nao esta substituindo as variaveis :?

precisa de mais algum jar alem desse: commons-configuration-1.5.jar

?? alguma config em algum xml?

[]'s

rollei

Estou tendo um probleminha em tempo de compilação com o Commons Configurations.

Tenho uma classe PropertiesHelper que implementa um singleton, ela ta ali em cima. Tentei modificar a classe para funcionar com o Commons Config, mas estou tendo problemas em um metodo. Nao esta compilando

private void loadPropertiesFile(final String fileName) {

        PropertiesConfiguration prop;

        // tests if the properties is null.
        if (propertyFiles == null) {
            propertyFiles = new Hashtable<String, PropertiesConfiguration>();
        }


        // Gets the classloader for the container
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

        if (classLoader == null) {
            classLoader = getClass().getClassLoader();
        }
        InputStream input = classLoader.getResourceAsStream(fileName);
        if (input != null) {
            prop = new PropertiesConfiguration();
            
            try {
                prop.load(input);
            } catch (ConfigurationException ex) {
                Logger.getLogger(PropertiesHelper.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            propertyFiles.put(fileName, prop);
        }
    }

o erro que esta dando eh no try-catch:

IDE:
Incompatible types.
received: org.apache.commons.configuration.ConfigurationException
requiered: java.lang.Throwable

eu ja tentei usar o try catch usando o thrwable:

try { prop.load(input); } catch (Throwable th) { //TODO }

problema eh o seguinte, quando eu coloco o catch para ConfigurationException ele da erro, mas quando eu tiro ele diz que existe uma excecao nao reportada … Jah tentei soh com o Throwable , soh com o ConfigurationException e com os dois … nenhum funcionou.

Que faco?

[]'s

rollei

tava faltando esse jar: commons-lang-2.4.jar

[]'s

rollei

consegui compilar o programa, mas ele continua nao trocando as variaveis

ele nao esta trocando os ${variavel} pelo valor de variavel no property …

porque?

EDIT

cara … to jah desistindo … vou acabar usando uma gambiarra e fazer uma funcao para trocar ${variavel} por um valor que eu vou passar na funcao

Criado 22 de julho de 2008
Ultima resposta 24 de jul. de 2008
Respostas 12
Participantes 4