Alterar Arquivo .properties

6 respostas
R

Boa noite galera.

Galera tenho um projeto que tem um arquivo .properties na pasta resources do projeto…
Bom consigo ler e edita-lo mas tem um pequeno problema…

segue o código:

package com.teste.testeproperties;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;


public class Propertiess {

	public static void main(String[] args) throws IOException {
		Properties prop = new Properties();
		
               //lendo o arquivo Prop.properties
		InputStream inputStream = Thread.currentThread()
				.getContextClassLoader()
				.getResourceAsStream("./Prop.properties");

		prop.load(inputStream);
		inputStream.close();
		System.out.println(prop.getProperty("teste")+"  -  "+prop.getProperty("teste2"));
		
		
		//Alterando Parametros
		
		FileOutputStream out = new FileOutputStream("./src/main/resources/Prop.properties");
		prop.setProperty("teste", "teste-atualizado");
		prop.setProperty("teste2", "teste-atualizado-numero-2");
		prop.store(out, null);
		out.close();
		
                //lendo arquivo Prop.properties alterado
		inputStream = Thread.currentThread()
				.getContextClassLoader()
				.getResourceAsStream("./Prop.properties");

		prop.load(inputStream);
		inputStream.close();
		System.out.println(prop.getProperty("teste")+"  -  "+prop.getProperty("teste2"));
	}

}

Estou dando print no parametro teste e teste2… sai o resultado normal…
Depois altero as propriedades, até ai vai bem… mas quando vou dar print novamente ele não mostra os parametros alterado… mostra os antigos…

Mas se eu dar refresh no projeto e depois os prints ele mostra os parametros alterados …

O problema é … não posso ficar dando reflesh no projeto…
Quero alterar esse arquivo e ler as propriedades já atualizadas…

Bom se alguém puder me ajudar eu agradeço desde já…

6 Respostas

TerraSkilll
Seu código não parece estar incorreto. Mas verifique se este trecho está localizando o arquivo correto, pois acho que você está usando setProperty() no arquivo errado:
FileOutputStream out = new FileOutputStream("./src/main/resources/Prop.properties");  // verifique se está achando o arquivo correto.
        prop.setProperty("teste", "teste-atualizado");  
        prop.setProperty("teste2", "teste-atualizado-numero-2");  
        prop.store(out, null);  
        out.close();
No meu teste, copiei seu código e alterei somente o path. Algo assim:
InputStream inputStream = Thread.currentThread()  
                    .getContextClassLoader()  
                    .getResourceAsStream("prop.properties");   // simplifiquei o caminho: o arquivo está na mesma pasta do .class
            ....// código aqui não foi alterado
            System.out.println(prop.getProperty("teste")+"  -  "+prop.getProperty("teste2"));  

            //Alterando Parametros  
              
            FileOutputStream out = new FileOutputStream("prop.properties");  
            ....// código aqui não foi alterado

                    //lendo arquivo Prop.properties alterado  
            inputStream = Thread.currentThread()  
                    .getContextClassLoader()  
                    .getResourceAsStream("prop.properties");  

            ....// código aqui não foi alterado
            System.out.println(prop.getProperty("teste")+"  -  "+prop.getProperty("teste2"));
Abraço.
R

Primeiramente agradeço a ajuda.

Então fiz isso que você fez…
Deu o mesmo resultado que o meu…
E criou outro arquivo .properties no main do projeto…

o meu properties esta no resource…

fico no aguardo se souber de algo…
agradeço desde já.

jcranky

Porque as vezes você usa o caminho mais longo, e as vezes o mais curto? Esse pode ser o problema, ou pode te ajudar a encontrá-lo.

R

Para ler não precisei pegar o caminho completo…
Mas para editar precisei…

alterei colocando o caminho completo em todos e não adiantou…

Estou tentando de outras maneiras quando conseguir posto aqui o resultado…

mas se tiverem mais ideias ficarei grato…

jcranky

Outra coisa, acho que o fato de você estar usando getContextClassLoader talvez altere o ponto de referência para procurar os arquivos. Talvez getClass().getClassLoader() (sem acessar a Thread) seja melhor?

WellingtonRamos

Já tentou um flush antes do close?

Criado 7 de junho de 2013
Ultima resposta 10 de jun. de 2013
Respostas 6
Participantes 4