[RESOLVIDO] Carregar dados de um arquivo propriedade

Criei um menu onde Adiciono dados da conexão do banco de dados em um arquivo .properties,mas não consigo fazer as strings da classe de conexão ler os dados.

Evento onde adiciono os valores no arquivo .properties
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

        try {
            File configFile = new File("config.properties");
            FileOutputStream fos = new FileOutputStream(configFile);
            Properties config = new Properties();
            

            config.setProperty("Host", jThost.getText());
            config.setProperty("Banco de Dados", jTbd.getText());
            config.setProperty("Usuario", jTusuario.getText());
            config.setProperty("Senha", jTsenha.getText());
            config.store(fos, "Configurações Banco de Dados");
            fos.close();
            System.out.println("\"Salvo com sucesso!\"");
            System.out.println(config.getProperty("Host"));
            System.out.println(config.getProperty("Banco de Dados"));
            System.out.println(config.getProperty("Usuario"));
            System.out.println(config.getProperty("Senha"));
           
      
            JOptionPane.showMessageDialog(rootPane, "Configurações salvas com sucesso!");
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }           

Classe Conexão:
package conexao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class Conexao {

    Properties config = new Properties();
    public Statement stm;
    public ResultSet rs;

    String host = config.getProperty("Host");
    String usuario = config.getProperty("Usuario");
    String senha = config.getProperty("Senha");

    public String caminho = "jdbc:mysql://" + host + ":3306/db_mercadinho";
    public Connection conn;

    public void Conexao() {
        try {
            conn = DriverManager.getConnection(caminho, usuario, senha);
            System.out.println("Conectado com sucesso!");
            System.out.println("Host:"+host);
            System.out.println("Caminho:"+caminho);
            System.out.println("Usuario:"+usuario);
            System.out.println("Senha:"+senha);

        } catch (SQLException ex) {
            
            System.out.println("Host:"+host);
            System.out.println("Caminho:"+caminho);
            System.out.println("Usuario:"+usuario);
            System.out.println("Senha:"+senha);
            System.out.println("Ocorreu um erro ao conectar!\n" + ex);
        }
    }

Quando rodo o programa:
run:
Host:null
Caminho:jdbc:mysql://null:3306/db_mercadinho
Usuario:null
Senha:null

Mas onde você carrega os dados do arquivo de properties?

1 curtida

Você só está criando o arquivo de propriedades com dados, mas não recupera esses dados do arquivo para utilizar posteriormente, por isso os dados são exibidos como null.

Você precisaria de algo como:

Properties properties = new Properties();

try {
	FileInputStream fis = new FileInputStream("CaminhoDoSeuArquivoDePropriedades");
	properties.load(fis);
} catch (IOException ioe) {
	throw new Exception(ioe);
}

String host = properties.getProperty("Host");
String usuario = properties.getProperty("Usuario");
String senha = properties.getProperty("Senha");
1 curtida

o arquivo onde os dados ficam salvos fica na raiz do projeto
Captura%20de%20Tela_20190708164108|690x387

Onde eu colocaria esse try?Tenho q criar um public void para carregar os dados do .properties?

Muito obrigado a todos,Consegui resolver:
Classe Conexao depois das alterações
package conexao;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Conexao {

    public Statement stm;
    public ResultSet rs;

    Properties config = new Properties();
    String host = null;
    String usuario = null;
    String senha = null;
    String bd = null;

    public String caminho = null;
    public Connection conn;

    public void CarregaDados() throws Exception {
        try {
            FileInputStream fis = new FileInputStream("config.properties");

            Properties config = new Properties();
            config.load(fis);
            System.out.println(config.getProperty("Host"));
            host = config.getProperty("Host");
            usuario = config.getProperty("Usuario");
            senha = config.getProperty("Senha");
            bd = config.getProperty("Banco_de_Dados");
            caminho = "jdbc:mysql://" + host + ":3306/" + bd;
        } catch (IOException ioe) {
            throw new Exception(ioe);
        }
    }

    public void Conexao() {
        try {
            CarregaDados();
            conn = DriverManager.getConnection(caminho, usuario, senha);
            System.out.println("Conectado com sucesso!");
            System.out.println("Host:" + host);
            System.out.println("Caminho:" + caminho);
            System.out.println("Usuario:" + usuario);
            System.out.println("Senha:" + senha);

        } catch (SQLException ex) {

            System.out.println("Host:" + host);
            System.out.println("Caminho:" + caminho);
            System.out.println("Usuario:" + usuario);
            System.out.println("Senha:" + senha);
            System.out.println("Banco de dados:" + bd);
            System.out.println("Ocorreu um erro ao conectar!\n" + ex);
        } catch (Exception ex) {
            Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Que bom que conseguiu resolver.
Agora, considere estudar boas práticas. Sugiro começar pelos princípios SOLID. Especificamente, o primeiro: Single responsibility (responsabilidade única).
Esse princípio diz que toda classe deve ser responsável por apenas uma ação. Exclusivamente.
Veja como tua classe faz várias coisas. Isso não é legal.
No mínimo, você teria de ter uma classe para lidar com as propriedades e outra para a persistência.

2 curtidas

Obrigado pela dica,realmente esta uma bagunça,acho q o meu erro foi nao ter planejado como o programa seria, e comecei a fazer as coisas sem ordem.Futuramente pretendo refazer meu projeto com as classes em seus devidos pacotes etc.Muito obrigado pela dica