Quem trabalha com desenvolvimento Java certamente já teve contato e/ou vez ou outra teve que configurar arquivos com a extensão .properties. Esses arquivos são muito uteis quando precisamos configurar propriedades de algum sistema de forma que não seja via banco e nem fique preso as classes Java. Quando um arquivo .properties é lido por classes Java as informações são armazenadas em um mapa de chave e valor. Dessa forma precisamos apenas jogar esses valores em algum a variável e fazermos o que bem entendermos com ela.

Numa classe de envio de emails por exemplo poderíamos armazenar alguns dados em arquivos properties como no exemplo abaixo:

    //Trecho do nosso arquivo de propriedades
    smtp=smtp.gmail.com
    porta=587
    ssl=true

A classe java abaixo é responsável por ler esse arquivo .properties

package br.com.semeru.util;

import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import javax.faces.context.FacesContext;

public class PropertiesLoader {    

	//Crio uma instancia da classe properties
    private static Properties prop = new Properties();
    
	//Crio um método estático que pode ser acessado por outras classes da aplicação sem a necessidade de instanciar
    public static Properties propertiesLoader() {
		
		//Informo o caminho onde se encontra meu arquivo properties de forma dinâmica
		//Poderia fazer isso de forma estática passando o diretório completo mas obviamente isso não é muito interessante.
        String atualDir = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/")
            +"WEB-INF/classes/nome_do_arquivo.properties";
        try {   //Tento recuperar as informações do arquivo de propriedades        
            
			//Apenas para testar imprimo o diretório atual do meu arquivo properties
			System.out.println(atualDir);
			//Crio uma instância de File passando o meu arquivo .properties via construtor
            File file = new File(atualDir);  
			//Agora crio uma instância de FileInputStream passando via construtor o objeto file instanciado acima
            FileInputStream fileInputStream = new FileInputStream(file);
			//Leio o fileInputStream recuperando assim o mapa contendo chaves e valores
            prop.load(fileInputStream);
			//Fecho o fileInputStream
            fileInputStream.close();           
        } catch (Exception e) {
			//Trato possíveis exceções
        }
        return prop;
		//Retorno um objeto prop com o mapa correspondente ao meu arquivo properties
    }
    
}

Aqui acessamos as propriedades lidas do arquivo em outra classe da aplicação.

/*Agora de qualquer classe que possa importar a PropertiesLoader podemos recuperar
as informações do .properties apenas passando a chave você receberá o valor. Depois
basta converter os resultados da forma que mais lhe convier.
Para recuperar dados do tipo boolean podemos fazer assim Boolean.parseBoolean(),
Integer com um Integer.parseInt(), já uma informação do tipo String basta apenas um .toString()
*/ 
smtp = PropertiesLoader.propertiesLoader().getProperty("smtp").toString();
porta = Integer.parseInt(PropertiesLoader.propertiesLoader().getProperty("porta"));
ssl = Boolean.parseBoolean(PropertiesLoader.propertiesLoader().getProperty("ssl")); 

Bom pessoal como podem ver é muito simples ler configurações em arquivos properties. Qualquer dúvida, postem aí.

Tags: ,