[RESOLVIDO ]Leitura de Arquivo Texto

Amigos, Tenho uma função que faz a leitura de um arquivo texto que contem os parâmetros para a conexão ao banco de dados:

[code]public static void ler_arquivo(String a){

    try{
        try(BufferedReader leitor = new BufferedReader(new FileReader("src/cx.txt"))){
        
            String linha = leitor.readLine();
            System.out.println(""+linha);
            
            while (linha != null){
            //processar linha lida
                System.err.println(linha);
                linha = leitor.readLine();
            
            }
        
        }
    
    }
catch (FileNotFoundException ex){

    System.out.println("Erro "+ex);
}
catch (IOException ex){
    
    System.out.println("Erro "+ex);
}
}

[/code]

Gostaria de saber como atribuo o valor deste arquivo txt a uma variável, para quanto o meu método que faz a conexão for chamado eu passe o valor a ela.
Minha ideia seria que eu pudesse mudar os parâmetros de conexão sem mexer no projeto, alterando apenas o arquivo txt.

Abraço a todos.

dado5000, Boa Tarde!

Então, no caso se a configuração ficar em um TXT, ele será tratado tudo como um texto só. O que você poderia utilizar para armazenar a configuração é um XML, que você cria as tags e converte via JDom em objeto…acredito que seja mais recomendado.

Entendeu?

AndreSorge, dessa forma não sei como fazer, se vc tiver um exemplo em código talvez eu possa entender.

Para algo tão básico quanto parâmetros de configuração, recomendo um arquivo .properties mesmo.

Se os parâmetros de configuração forem por usuário do Windows, você pode guardá-los no registry do Windows, usando a API de Preferences: http://docs.oracle.com/javase/6/docs/api/java/util/prefs/Preferences.html

Pessoal,

Fiz dos dois modos: Properties e XML

Properties

Arquivo properties: ConfiguracaoBanco.properties


nomeBanco=Teste
nomeUsuario=teste
senha=teste

Classe que irá manipular o arquivo:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.PropertyResourceBundle;


public class LerArquivoProperties {


	public static void main(String[] args) {
		
		
		try {
			File arquivoConfiguracao = new File("./src/ConfiguracaoBanco.properties");
			FileInputStream stream = new FileInputStream(arquivoConfiguracao);
			PropertyResourceBundle arquivo = new PropertyResourceBundle(stream);
			
			System.out.println(arquivo.getObject("nomeBanco"));
			System.out.println(arquivo.getObject("nomeUsuario"));
			System.out.println(arquivo.getObject("senha"));
			
		} catch (final FileNotFoundException e) {
			e.printStackTrace();
		} catch (final IOException e) {
			e.printStackTrace();
		}
	}
	
}

Agora o XML: ConfiguracaoBD.xml

<?xml version="1.0" encoding="UTF-8"?>

<configuracaoBancoDeDados>
	<dadosConfiguracao nomeBanco="Teste" nomeUsuario="teste" senha="teste"/>
</configuracaoBancoDeDados>

Classe que manipula o XML:

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;



public class LerArquivoXML {

	
	public static void main(String[] args) throws JDOMException, IOException {
		LerArquivoXML xml = new LerArquivoXML();
		xml.lerXML();
	}
	
	public void lerXML() throws JDOMException, IOException{
	    //Aqui você informa o nome do arquivo XML.  
	    File f = new File("./src/ConfiguracaoBD.xml");  
	      
	    //Criamos uma classe SAXBuilder que vai processar o XML
	    SAXBuilder sb = new SAXBuilder();  
	      
	    //Este documento agora possui toda a estrutura do arquivo.  
	    Document d = sb.build(f);  
	      
	    //Recuperamos o elemento root  
	    Element mural = d.getRootElement();  
	      
	    //Recuperamos os elementos filhos (children)  
	    List elements = mural.getChildren();  
	    Iterator i = elements.iterator();  
	      
	    //Elemento filho  
	    while (i.hasNext()) {  
	        Element element = (Element) i.next();  
	        //Aqui você pode criar um objeto e popular para manipular em qualquer ponto da aplicação
	        System.out.println("nomeBanco: "+ element.getAttributeValue("nomeBanco"));  
	        System.out.println("nomeUsuario: "+ element.getAttributeValue("nomeUsuario"));  
	        System.out.println("senha: "+ element.getAttributeValue("senha"));  
	    }  
	}
	
}

Para utilizar o JDom você precisa baixar o jar nesse link: http://www.jarfinder.com/index.php/jars/versionInfo/50171 e adicionar no Builpath do seu projeto

Espero ter ajudado

AndreSorge, ótimo o método, o properties é muito bom gostei. Mas resolvi de outra forma. Consegui com que o arquivo fosse lido e os valores de cada linha no arquivo fossem atribuidos a cada variável desejada. Coloquei no txt 4 linhas: local, banco, usuário e senha e incorporei no meu método de conexão para que variáveis que recebem o valor para fazer a conexão.

Segue o código:

[code]public boolean conecta(String local, String banco, String usuario, String senha)
{
boolean retorno = false;
try
{

String arquivo = "src/cx.txt";


try {
    try (FileReader arq = new FileReader(arquivo)) {
        BufferedReader lerArq = new BufferedReader(arq);
        int contador = 0;
        
        local = lerArq.readLine();
        banco = lerArq.readLine();
        usuario = lerArq.readLine();
        senha = lerArq.readLine();
        // Aqui cada variavel irá receber o valor da linha 1, 2,3 e 4 do .txt
        while (local != null && contador !=1 ) {
          System.out.printf("%s\n", local);
          contador ++;       
        }
        while (banco != null && contador !=2 ) {
          System.out.printf("%s\n", banco);
          contador ++;       
        }
        while (usuario != null && contador !=3 ) {
          System.out.printf("%s\n", usuario);
          contador ++;       
        }
        while (senha != null && contador !=4 ) {
          System.out.printf("%s\n", senha);
          contador ++;       
        }
    }
} catch (IOException e) {
    JOptionPane.showMessageDialog(null,"Erro na abertura do arquivo de conexão.\n");
}

System.out.println();

Class.forName(“com.mysql.jdbc.Driver”);
con = DriverManager.getConnection
(“jdbc:mysql://” + local + “/” + banco,
usuario, senha);
retorno = true;
}
catch ( ClassNotFoundException | SQLException e)
{
JOptionPane.showMessageDialog(null,“Erro de conexão:\n” + e);
}
return retorno;
}[/code]

Ai Está todo o meu método de conexão, desta forma em qualquer máquina que fizer a instalação eu simplesmente altero o arquivo txt para fazer a conexão com o banco e possibilita também até que se feito um instalador para o programa o usuário insira o modo server ou cliente e ele mesmo entre com os dados do banco e a classe faz a gravação e leitura no arquivo. Claro que eu não implementei isso ai, mas dessa maneira fica muito fácil de implementar.

AndreSorge, eu mesmo coloco [RESOLVIDO] no tópico ou o pessoal do fórum que fecha???

dado5000, Bom Dia!

Que bom que você conseguiu! Parabéns! Ficou bem legal a solução proposta por você!

Você mesmo edita o título para [RESOLVIDO]!

Abraços,

Boa Sorte!

Vlw, AndreSorge. Até a próxima.