Arquivo .properties usando variavel

12 respostas
R

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

R

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

Rafael

R

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

R

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

Rafael

J

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.

R
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 :~

R

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?

R
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…

R

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

R

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

R

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

[]'s

R

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