[RESOLVIDO ]Leitura de Arquivo Texto

7 respostas
D

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:

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);
    }
    }

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.

7 Respostas

AndreSorge

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?

D

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

E

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

AndreSorge

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

D

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:
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;
}

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???

AndreSorge

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!

D

Vlw, AndreSorge. Até a próxima.

Criado 2 de abril de 2013
Ultima resposta 5 de abr. de 2013
Respostas 7
Participantes 3