ajuda com api Properties  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
davidhc
JavaEvangelist

Membro desde: 26/07/2006 09:11:47
Mensagens: 359
Offline

Opa

Estou usando a api 'Properties' para alterar as configurações de um arquivo .properties, mas quando eu dou o setProperty, ele aparente escrever e em seguido eu rodo o getProperty e ele mostra o valor que eu setei no setProperty e quando eu abro o arquivo .properties, não tem nada alterado!


talvez esteja tão vazio =o
[Email]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Voçê tem que salvar o arquivo....

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
davidhc
JavaEvangelist

Membro desde: 26/07/2006 09:11:47
Mensagens: 359
Offline

como que faço isso?

se eu usar FileOutputStream, não vai resolver meu problema pq terei que escrever todo arquivo novamente e eu só quero mudar uma propriedade!

talvez esteja tão vazio =o
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Se quer usar um banco de dados, use um banco de dados.

Quando você usa "Properties", que é um arquivo-texto, você tem de recuperar todas as propriedades e salvar todas as propriedades, mesmo que apenas uma propriedade seja modificada.
Isso é inerente a arquivos-texto.
O formato XML também tem esse problema.
[WWW]
davidhc
JavaEvangelist

Membro desde: 26/07/2006 09:11:47
Mensagens: 359
Offline

então eu preciso criar um FileOutputStream e dar write para tudo que já existe no arquivo?

edit:

adicionei a linha



Ele imprime de novo tudo, mas fica faltando os comentários e ele imprime fora de ordem..tem como imprimir sem mudar a ordem e sem tirar os comentários?

talvez esteja tão vazio =o
[Email]
Kknd
JavaEvangelist
[Avatar]

Membro desde: 13/10/2006 10:54:18
Mensagens: 338
Offline

Pra salvar vc tem que usar o método store(). No meu caso:


.: Temple Of Shadows :. Linux User #435550

OProj
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Engraçado, não foi você mesmo que colocou uma solução aqui?
http://www.guj.com.br/posts/list/52745.java#277553
[WWW]
davidhc
JavaEvangelist

Membro desde: 26/07/2006 09:11:47
Mensagens: 359
Offline

ViniGodoy wrote:Engraçado, não foi você mesmo que colocou uma solução aqui?
http://www.guj.com.br/posts/list/52745.java#277553


sim, mas eu não tinha visto que ele não estava alterando no próprio .properties

tem alguma idéia?
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Só para botar mais lenha na fogueira.

O problema de um arquivo "properties" é que os programadores acham que ele é exatamente um arquivo ".ini" - por exemplo, você poderia pôr comentários sem que eles se percam na atualização do arquivos, e a ordem das chaves não se alteraria.
O Windows tem uma API - WritePrivateProfileString - que dá a impressão de "escrever diretamente na linha". Na verdade ele lê o arquivo inteirinho, grava a nova propriedade no lugar adequado, e grava o arquivo sobre o arquivo original.
Um arquivo Properties, em contrapartida:
- Não preserva os comentários que você porventura tenha escrito;
- O mecanismo para gravação e leitura é explícito, em vez de ser implícito como no Windows.
Eu tive de criar uma subclasse de Properties que preservasse os comentários e a ordem das propriedades, para evitar esses problemas que a implementação padrão tem.
[WWW]
davidhc
JavaEvangelist

Membro desde: 26/07/2006 09:11:47
Mensagens: 359
Offline

Kknd wrote:Pra salvar vc tem que usar o método store(). No meu caso:



save ou store vão dar no mesmo..save está deprecated..

talvez esteja tão vazio =o
[Email]
davidhc
JavaEvangelist

Membro desde: 26/07/2006 09:11:47
Mensagens: 359
Offline

thingol wrote:Só para botar mais lenha na fogueira.

O problema de um arquivo "properties" é que os programadores acham que ele é exatamente um arquivo ".ini" - por exemplo, você poderia pôr comentários sem que eles se percam na atualização do arquivos, e a ordem das chaves não se alteraria.
O Windows tem uma API - WritePrivateProfileString - que dá a impressão de "escrever diretamente na linha". Na verdade ele lê o arquivo inteirinho, grava a nova propriedade no lugar adequado, e grava o arquivo sobre o arquivo original.
Um arquivo Properties, em contrapartida:
- Não preserva os comentários que você porventura tenha escrito;
- O mecanismo para gravação e leitura é explícito, em vez de ser implícito como no Windows.
Eu tive de criar uma subclasse de Properties que preservasse os comentários e a ordem das propriedades, para evitar esses problemas que a implementação padrão tem.


Sempre com ótimas explicações thingol!
Vou voltar para a idéia inicial que era escrever o arquivo novamente! rs
[Email]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team