Mostrando postagens com marcador filewriter. Mostrar todas as postagens
Mostrando postagens com marcador filewriter. Mostrar todas as postagens

terça-feira, maio 15, 2007

Trabalhando com arquivos .properties

Esses dias tive que manipular um arquivo .properties e não tinha muita noção de como o fazer, então fui dando uma fuçada aqui e ali e achei na API tudo que eu precisava e fiz o que eu queria.

Bom para efeitos didáticos e de salvamento, se alguém tiver no sufoco e tiver que fazer isso também, ta aí a classezinha que quebra o galho (na verdade não é a versão final do que eu fiz, mas daqui eu parti para o que eu precisava).

Primriro criei um arquivo de propriedades para testes. Arquivos de propriedades são aquivos contendo texto em que a cada linha se tem um par de chave e valor.

configuracoes.properties:

sistema=xyz
versao=0.0.1
plataforma=MS Windows
sgbd=MySQL
autor=Jean Jorge Michel

Agora eu queria algumas funcionalidades na minha classe (já que eu ia fazer um cara que pelo menos lesse o arquivo, eu já faria alterar e salvar também):

- public java.util.Properties carregarPropriedades(java.lang.String origem);
- public void imprimir(java.util.Map propriedades);
- public java.lang.String getPropriedade(java.util.Properties propriedades, java.lang.String propriedade);
- public java.util.Properties incluirPropriedade(java.lang.String chave, java.lang.String valor, java.util.Properties propriedades);
- public java.util.Properties removerPropriedade(java.lang.String chave, java.util.Properties propriedades);
- public void salvar(java.util.Map propriedades, java.lang.String destino).

Esses são os métodos que eu tenho na minha classe. Agora lá vem ela:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/**
* @author Jean Jorge Michel
* @version 1.0
*/
public class ManipuladorProperties {

    /**
     * Método que retorna um objeto Properties com as informações do sistema.
     * @param arquivo O Caminho físico do arquivo e seu nome.
     * @return Um objeto Properties.
     */
    public Properties carregarPropriedades(String origem) {
        FileInputStream arquivoConfig = null;

        Properties configSistema = new Properties();

        try {
            arquivoConfig = new FileInputStream(origem);

            configSistema.load(arquivoConfig);
        }
        catch(FileNotFoundException e) {
            e.printStackTrace();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                arquivoConfig.close();
            }
            catch(IOException e) {
                e.printStackTrace();
            }
        }

        return configSistema;
    }

    /**
     * Método que imprime no console todas as propriedades e seus respectivos
     * valores encontradas no arquivo de propriedades.
     * @param propriedades Um objeto do tipo Properties.
     */
    public void imprimir(Map propriedades) {
        Set<String> valores = propriedades.keySet();

        for(String valor: valores) {
            System.out.println(valor + "=" + propriedades.get(valor));
        }
    }

    /**
     * Método que retorna o valor de uma propriedade de acordo com o seu nome.
     * @param propriedades Um objeto do tipo Properties.
     * @param propriedade Nome da propriedade.
     * @return O valor da propriedade.
     */
    public String getPropriedade(Properties propriedades, String propriedade) {
        return propriedades.getProperty(propriedade);
    }

    /**
     * Método que adiciona ao objeto Properties mais uma propriedade.
     * @param chave O nome da nova propriedade a incluir.
     * @param valor O valor da nova propriedade
     * @param propriedades O objeto Properties a ser modificado.
     * @return Retorna o objeto Properties modificado.
     */
    public Properties incluirPropriedade(String chave,
                                         String valor,
                                         Properties propriedades) {
        propriedades.put(chave, valor);

        return propriedades;
    }

    /**
     * Método que remove do objeto Properties uma propriedade.
     * @param chave A propriedade a ser removida
     * @param propriedades O objeto Properties a ser modificado.
     * @return Retorna o objeto Properties modificado.
     */
    public Properties removerPropriedade(String chave, Properties propriedades) {
        propriedades.remove(chave);

        return propriedades;
    }

    /**
     * Método que persiste no disco o arquivo properties.
     * @param propriedades O objeto Properties a ser gravado.
     * @param destino O caminho físico e o nome do arquivo a ser criado.
     */
    public void salvar(Map propriedades, String destino) {
        FileWriter fw = null;
        
        try {
            fw = new FileWriter(destino);

            Set<String> valores = propriedades.keySet();

            for(String valor: valores) {
                fw.write(valor + "=" + propriedades.get(valor) + "\r\n");
            }
        }
        catch(FileNotFoundException e) {
            e.printStackTrace();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                if (fw != null) {
                    fw.close();
                }
            }
            catch(IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Para testar:

String caminho = "C://temp//";
String arquivo = "configuracoes.properties";

ManipuladorProperties mp = new ManipuladorProperties();
Properties configSistema = mp.carregarPropriedades(caminho + arquivo);

//Lista as propriedades
mp.imprimir(configSistema);

//Recupera uma propriedade específica
System.out.println(mp.getPropriedade(configSistema, "autor"));

//Inclui uma propriedade nova
mp.incluirPropriedade("data", new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()), configSistema);

//Grava o arquivo, neste caso com outro nome
mp.salvar(configSistema, caminho + "novas_propriedades.properties");

É isso aí, esta feito quem quiser usar pode usar, sem nenhuma garantia claro. :)

Gostou, quer criticar, sugerir algo... comente aí o post!