Properties

Assunto: Com certeza uma das mais utilizadas coleções do Java. O que é e como utilizá-la.

Você pode ler este tutorial na íntegra http://www.guj.com.br/java.tutorial.artigo.35.1.guj

Por favor, coloque as suas dúvidas e seus comentários sobre este tutorial aqui.
Sinta-se livre para fazer qualquer tipo de pergunta, desta maneira você estará nos ajudando e aos outros usuários!

Alguém acha que a classe Properties poderia substituir um arquivo de configuração XML?
Deixe-me explicar: para evitar ifs no meu programa penso em “parsear” um arquivo XML mais ou menos assim:
<request name=“Teste”>
<pagina value = “test.jsp”/>
<metodo value = “getValue();”/>
<parametro value = “teste”/>
<mensagem value = “olá”/>
</request>
<request name=“Teste1”>
<pagina value = “test1.jsp”/>
<metodo value = “getValueNovo();”/>
<parametro value = “teste1”/>
<mensagem value = “olá de novo”/>
</request>
Busco as informações “nodes” de acordo com o name do request.
Pensei em utilizar a classe Properties para fazer isso já que ela trabalha com propriedade = valor… entretanto, não achei forma de trabalhar com valores diferentes no mesmo arquivo.
O que acha?[/quote]

Realmente voce nao pode ter duas chaves iguais no mesmo arquivo.
A unica saida nesse caso seria voce ter arquivos separados, para cada tipo de caso que fosse necessario.

Rafael

Surgiu a necessidade de carregar apenas determinados properties de um arquivo, de acordo com um parametro passado.

Imagine o seguinte arquivo .properties:

mysql.username=abc
mysql.password=123

oracle.username=def
oracle.password=456

Quando vou carregar o arquivo .properties, gostaria de passar como parametro mysql ou oracle e de acordo com esse parametro, carregar username e password corretamente.

Dei uma olhada no fonte da classe Properties e vi que seria bem simples para extender a classe e implementar, o problema é que alguns atributos do método load() são private, então minha classe não consegue enxerga-los.

Há como contornar o problema? O que sugerem como work-around?

Abraços

Estenda, faca override do load() e manipule o retorno dele… algo como

public class MyProperties extends Properties
{
    public void load(....) 
    {
        super.load(....);

        // Agora vc varre todas as propriedades
        // e deixa somente as desejadas
    }
}

Se quiser, ainda pode fazer overload do getProperty() e afins, caso use uma outra forma de armazenamento dos dados ( ao inves de chamar super.getProperty, por exemplo, ou se preferir guardar em um outro hashmap ao inves de usar o da classe pai ).

Rafael

Rafael