Manipular arquivo .properties

7 respostas
R

e ai pessoal blz, estou com uma duvida aqui tenho um arquivo Messages.properties e quero passar um valor qualquer para ser colocado no lugar de {0}, {1}, {2}, etc

o arquivo Messages.properties é esse:

UNKNOWN_OPTION = Unkown %-option {0}
UNEXPECTED_CHAR = Unexpected character {0} 
UNEXPECTED_NL = Unexpected character <newline> {0}

para pegar uma mensagem qualquer tentei usar as duas opcoes a seguir, elas pegam corretamente a mensagem que eu quero, porem nao consigo setar os campos jah mencionados acima,

ResourceBundle rb = ResourceBundle.getBundle("Messages");
System.out.println(rb.getString("UNKNOWN_OPTION"));

ou

try {  
      Properties p = new Properties();
      p.load( new FileInputStream(new File("Messages.properties")));
      System.out.println(p.getProperty("UNKNOWN_OPTION"));
}catch (IOException ex) {   
      ex.printStackTrace();   
}

agradeço pela atenção pessoal,
Rafael Hornung

7 Respostas

M

o valor das propriedades dentro do arquivo devem ser separados por espaço, virgula, ponto e virgula…

prop 1,2,3

ou

prop 1;2;3

ou

prop 1 2 3

tenta ver isso…

R

Vc pode usar o replace da classe String ou por RegEx…
Sinta-se a vontade para a solução! rs

T

Use a classe java.text.MessageFormat para substituir os {0}, {1} etc. Não é preciso usar regex (se bem que MessageFormat tem um pequeno problema em Java 1.3 ou anterior, porque nessas versões antigas do Java, MessageFormat só aceita os números de 0 até 9.)

R

valeu ai galera, achei outra solucao aqui tb,

UNKNOWN_OPTION = Unkown %-option '#'   
UNEXPECTED_CHAR = Unexpected character '#'   
UNEXPECTED_NL = Unexpected character <newline> '#'
Properties p = new Properties();
p.load( new FileInputStream(new File("Messages.properties")));
String m = p.getProperty("UNKNOWN_OPTION");
m = m.replace('#', 'a');
System.out.println(m);

o unico problema é que a parte do texto a ser trocado pode ser apenas caracter, vou dar uma olhada nas outras solucoes propostas, obrigado pessoal

M

o replace da class String pode receber duas Strings também

String original = "Meu nome é '#'";
String nova = original.replace("'#'","Marcos");
System.out.println(nova);
R

Mark_Ameba:
o replace da class String pode receber duas Strings também

String original = "Meu nome é '#'"; String nova = original.replace("'#'","Marcos"); System.out.println(nova);

valeu pela dica, com isso consigo fazer oq eu queria, valeu mesmo

T

Vamos lidar com várias formas de trocar um "{0}", "{1}" etc. por strings apropriadas.
Você pode usar MessageFormat, String.format (Java 5) ou String.replaceAll.

Usando MessageFormat: (Java >= 1.1)

String s = MessageFormat.format ("Troque o seu carro {0} por um {1} para não se encontrar com a Lady Murphy", 
    new Object[]{ "Ford", "Fiat" });

Usando String.format (Java >= 5.0):

String s = String.format ("Troque o seu carro %1$s por um %2$s para não se encontrar com a Lady Murphy", 
    "Ford", "Fiat");

Usando String.replaceAll (nesse caso você não pode trocar mais de uma coisa por vez) (Java >= 1.4):

String s = "Troque o seu carro {0} por um {1} para não se encontrar com a Lady Murphy".replaceAll ("\\{0\\}", "Ford").replaceAll ("\\{1\\}", "Fiat");

Fica à sua escolha.

Criado 30 de outubro de 2007
Ultima resposta 30 de out. de 2007
Respostas 7
Participantes 5