Mais um duvida de Properties

11 respostas
H

Seguinte, na aplicacao q to fazendo aqui, ela conterá uma lista de servidores p conectar via SSH. O formato de cadas registro do servidor será mais ou menos assim:

Nome: Linux01
Ip: 200.190.122.234
Porta: 22

Eu tenho q manter um arquivo .properties com tds os dados de tds os servidores, para serem carregados na GUI de Login.

O problema eh q a collection Properties nao salva chaves c msm nome. Ou seja eu to salvando desse jeito:

Nome1: Linux01
Ip1: 200.190.122.234
Porta1: 22

Nome2: Linux02
Ip2: 200.190.122.233
Porta2: 22

Nome3: Linux03
Ip3: 200.190.122.235
Porta3: 22

Eu to achando isso feio e queria saber se tem como salvar as varias configuracoes usando a msm chave, seria mais ou menos assim:

Nome: Linux01
Ip: 200.190.122.234
Porta: 22

Nome: Linux02
Ip: 200.190.122.233
Porta: 22

Nome: Linux03
Ip: 200.190.122.235
Porta: 22

Eu vi um q parece q com XML possa ser q faca isso, algum ja fez?

11 Respostas

T

Eu sou mais prático e prefiro usar assim, que é fácil para um ser humano editar:

servidor1=linux01,200.190.122.234,22
servidor2=linux02,200.190.122.235,22
servidor3=linux03,200.190.122.236,22

Se quiser usar XML, use.

H

Interessante thingol, boa dica.

Mas usar msm chave “servidor” p/ tds as entradas, p n ficar usando servidor1, servidor2, servidor3…, tem como?

Foxlol

Cara não tem como fazer isso, as chaves não podem estar duplicadas, caso estejam, só a última será retornada.

Tente algo como:

public static void main(String[] args) {
        File file = new File("resource/teste.properties");    
        Properties props = new Properties();
        FileInputStream fis = null;
        
        try {
            fis = new FileInputStream(file); 
            
            props.load(fis);  
            fis.close();
        }
        catch (IOException ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        
        String propsServidores = props.getProperty("servidores");
        String propsIps = props.getProperty("ips");
        String propsPortas = props.getProperty("portas");
        
        String servidores[] = propsServidores.split(",");
        String ips[] = propsIps.split(",");
        String portas[] = propsPortas.split(",");
        
        for (int i = 0; i < servidores.length; i++) {
        	System.out.println("Nome: " + servidores[i]);
        	System.out.println("IP: " + ips[i]);
        	System.out.println("Porta: " + portas[i] + "\n");
        }
    }

Arquivo properties:

servidores=Linux,Windows,Mac
ips=200.222.222.333,200.222.222.444,200.222.222.555
portas=22,23,24

A saída:

Nome: Linux
IP: 200.222.222.333
Porta: 22

Nome: Windows
IP: 200.222.222.444
Porta: 23

Nome: Mac
IP: 200.222.222.555
Porta: 24

O problema é que tem que tomar cuidado para não lançar um ArrayIndexOutOfBoundsException se os valores das chaves no arquivo properties não forem equivalentes.

heitor.rapcinski

Eu uso o commons configuration do apache:

http://commons.apache.org/configuration/userguide/howto_properties.html#Properties_files

Foxlol

Realmente, esta API da Apache que o heitor.rapcinski disse facilita bastante.

Refiz o exemplo anterior com ela.

public static void main(String[] args) {
        Configuration config = null;

	try {
	   config = new PropertiesConfiguration("resource/teste.properties");
	} catch (ConfigurationException e) {
	   e.printStackTrace();
	}
        
        List servidores = config.getList("servidores");
        List ips = config.getList("ips");
        List portas = config.getList("portas");
        
        for (int i = 0; i < servidores.size(); i++) {
        	System.out.println("Nome: " + servidores.get(i));
        	System.out.println("IP: " + ips.get(i));
        	System.out.println("Porta: " + portas.get(i) + "\n");
        }
    }

Os jars que vc precisa:

commons-configuration
commons-lang
commons-logging
commons-collections

Podem ser encontrados em: http://commons.apache.org/

Abraço.

H

Interessantes as propostas de vcs.

So acho q vo me complicar na hr de remover, ou n?

Foxlol

hlds:
Interessantes as propostas de vcs.

So acho q vo me complicar na hr de remover, ou n?

Remover o que?

H

Pq isso vai persistir uma lista de servidores ssh ok?

Entao tem opcao de salvar, editar e remover (cada servidor), sacou?

Eu ja bolei uma parada aqui, acho q dará certo.

heitor.rapcinski

O commons configurator é bom pois vc pode buscar as configurações em vários tipos de fontes: XML, Properties, JNDI, etc. Isso sem ter que mudar a sua implementação.

ramilani12

hlds:
Seguinte, na aplicacao q to fazendo aqui, ela conterá uma lista de servidores p conectar via SSH. O formato de cadas registro do servidor será mais ou menos assim:

Nome: Linux01
Ip: 200.190.122.234
Porta: 22

Eu tenho q manter um arquivo .properties com tds os dados de tds os servidores, para serem carregados na GUI de Login.

O problema eh q a collection Properties nao salva chaves c msm nome. Ou seja eu to salvando desse jeito:

Nome1: Linux01
Ip1: 200.190.122.234
Porta1: 22

Nome2: Linux02
Ip2: 200.190.122.233
Porta2: 22

Nome3: Linux03
Ip3: 200.190.122.235
Porta3: 22

Eu to achando isso feio e queria saber se tem como salvar as varias configuracoes usando a msm chave, seria mais ou menos assim:

Nome: Linux01
Ip: 200.190.122.234
Porta: 22

Nome: Linux02
Ip: 200.190.122.233
Porta: 22

Nome: Linux03
Ip: 200.190.122.235
Porta: 22

Eu vi um q parece q com XML possa ser q faca isso, algum ja fez?


Veja a implementação do Properties o metodo keySet() retorna um Set essa collection nao permite redundância de chaves .

Nao seria interessante utilizar um XML? uma boa dica JDOM

H

Na verdade eu vi um executavel de um cara que salvava em XML no estilo:

<server name="nome">
   <ip num="200.200.200">
   <porta num="22">
</server>

<server name="nome2">
   <ip num="200.200.201">
   <porta num="22">
</server>

Nesse estilo. Eu queria algo assim, mas n encontrei um codigo fonte desta implementacao. Entao apelei p estilo servidor1, servido2, servidor3, no msm properties. So q nesse estilo p manter (remocao, etc) eh meio chatinho, mas to desenrrolando aqui.

Criado 22 de janeiro de 2008
Ultima resposta 24 de jan. de 2008
Respostas 11
Participantes 5