Abertura e leitura de arquivo [RESOLVIDO]

Bom dia javeiros de plantão! :smiley:

Estou desenvolvendo uma classe que realiza a comunicação com o banco de dados, e gostaria de pegar as informações de conexão de um arquivo, porém não estou conseguindo abrir o arquivo e pesquisando no google e até mesmo aqui no forum não encontrei algo que pudesse estar errado… segue o código:

[code]public BancoDados() {
try {
BufferedReader arquivo = new BufferedReader(new FileReader(
new File(“config.ini”)));

			String linha;

			while(arquivo.ready()){
				linha = arquivo.readLine();
				
				if(linha.startsWith("SERVIDOR:"))
					setEndServer(linha);
				
				if(linha.startsWith("PORTA:"))
					setPorta(linha);
			}
		} catch (FileNotFoundException e) {
			JOptionPane.showMessageDialog(null, 
    				"Arquivo de configurações não foi encontrado. Favor entrar em contato com o administrador do sistema.", 
    				"Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);
		}catch (IOException e) {
		
		e.printStackTrace();
		} 
	}[/code]

Porém, acaba dando a exception de FileNotFound… Mesmo o arquivo estando presente no diretório…

Alguém pode me dar uma luz ou apontar o erro?

Agradeço a atenção!

Olá.

Para ler arquivos, utilize a classe Scanner, ela é mais simples.
Além disso, vc usa o Eclipse ou o Netbeans? Cada um procura o arquivo em um diretório padrão diferente. Para não ter dúvidas, coloca o caminho completo do arquivo lá em new FIle.

ok?

Eu uso o Eclipse…

Mas eu não gostaria de usar o caminho completo na aplicação, pois so Deus sabe onde essa aplicação vai estar… E acabei de testar e continua dando o mesmo erro…

Existe algum método no Java que eu consigo pegar o diretório atual da aplicação? Eu programo em .Net e lá tem um esquema tipo Directory.GetCurrentDirectory(); que me retorna o diretório atual.

Existe isso em Java?

Pegar diretorio corrente.

O arquivo precisa ficar na sua workspace no eclipse.

Tente não se amarrar a isso (identificar o diretório corrente da aplicação).
Em vez disso, o modo correto de você abrir um arquivo que está junto com sua aplicação (mas dentro do seu jar, por exemplo) é pô-lo em algum lugar do seu classpath, e usar getClass().getResourceAsStream() - há varios exemplos aqui no GUJ.

[quote=MaxVenom]Eu uso o Eclipse…

Mas eu não gostaria de usar o caminho completo na aplicação, pois so Deus sabe onde essa aplicação vai estar… E acabei de testar e continua dando o mesmo erro…

Existe algum método no Java que eu consigo pegar o diretório atual da aplicação? Eu programo em .Net e lá tem um esquema tipo Directory.GetCurrentDirectory(); que me retorna o diretório atual.

Existe isso em Java?
[/quote]

pra vc pegar o nome do diretório vc pode fazer isso:

[code]class TestProp{

public static void main(String ... a){
            String diretorio = System.getProperty("user.dir");
            System.out.println(diretorio);
}

}[/code]

Olha tente fazer assim

public BancoDados()  {  
       File arquivo = new File ("config.ini");
	    try {
	    	FileWriter writer = new FileWriter(arquivo);  
	    	FileReader reader = new FileReader(arquivo);  
	    	BufferedReader leitor = new BufferedReader(reader);	    	
				
				
	    	String linha;

			while(leitor.ready()){
				linha = leitor.readLine();
					
				if(linha.startsWith("SERVIDOR:"))
					setEndServer(linha);
					
				if(linha.startsWith("PORTA:"))
					setPorta(linha);
				}
			} catch (FileNotFoundException e) {
				JOptionPane.showMessageDialog(null, 
	    				"Arquivo de configurações não foi encontrado. Favor entrar em contato com o administrador do sistema.", 
	    				"Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);
			}catch (IOException e) {
				e.printStackTrace();
			} 
			
	}

Se funcionar avise…

Hummmmmmmm… progresso!!!

Agora pelo menos ele consegue encontrar o arquivo (arquivo.exists() = true) mas naum consigui ler…

To tentando ler, assim q conseguir eu posto a solução.

Se alguem ja souber e quizer colar ae… eu agradeço! :smiley:

Algo estranho para mim um mero iniciante nesta vasta linguagem chamada Java… :smiley:

Ele ta zerando o arquivo…

Exemplo, o arquivo tem conteudo… eu inicio o programa e apaga todo o conteudo do arquivo!

Tio, se você puder mudar o formato (só um pouquinho) para o formato Properties, vai ver que é muito simples. Basta usar o método load da classe java.util.Properties, não é difícil achar exemplos na Internet.

(Evite reinventar a roda se possível).

O único problema do formato Properties é que o caracter “” deve ser duplicado. (Isso quebrou as pernas de um colega meu).
Por exemplo, se você tinha configurado algo como:

SERVIDOR: \ABC0123

ou

ARQUIVO: c:\documents and settings\joseaparecido\meus documentos\teste.doc

Você precisa trocar por:

SERVIDOR=\\ABC0123
ARQUIVO= c:\documents and settings\joseaparecido\meus documentos\teste.doc

[quote=MaxVenom]Algo estranho para mim um mero iniciante nesta vasta linguagem chamada Java… :smiley:

Ele ta zerando o arquivo…

Exemplo, o arquivo tem conteudo… eu inicio o programa e apaga todo o conteudo do arquivo! [/quote]

  1. Se você criar um FileWriter sobre um arquivo, ele costuma zerar o arquivo, já que é para você gravar nele, não?
  2. Para atualizar um arquivo texto, não se pode ao mesmo tempo criar um FileWriter e um FileReader para o mesmo arquivo. Você vai ter problemas, como você mesmo constatou. O correto, se é realmente isso que você quer fazer, é ler o arquivo inteiro em memória primeiro, fazer as modificações, e então gravar o arquivo inteiro. Lembre-se que mesmo em C++ não é possível atualizar um arquivo-texto abrindo-o para leitura e escrita ao mesmo tempo.

Vlwwwwwwwwww galera!!! Agora o esquema ta funfundo 100% 8)

Realmente, depois que removi o writer (até mesmo por que nao ia usar) os dados continuaram sendo mantidos no arquivo.

Aos que tiverem a mesma dúvida, segue o código que passei a usar:

[code]try {
File arquivo = new File (“config.ini”);

         FileReader reader = new FileReader(arquivo);    
         BufferedReader leitor = new BufferedReader(reader);           

		String linha;

		while((linha = leitor.readLine()) != null){
			if(linha.startsWith("SERVIDOR:"))
				setEndServer(linha);
			
			if(linha.startsWith("PORTA:"))
				setPorta(linha);
		}
	} catch (FileNotFoundException e) {
		JOptionPane.showMessageDialog(null, 
				"Arquivo de configurações não foi encontrado. Favor entrar em contato com o administrador do sistema.", 
				"Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);
	}catch (IOException e) {
	
		JOptionPane.showMessageDialog(null, 
				"Erro na leitura do arquivo.", 
				"Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);
	} [/code]

Vlw galera, precisando… tamoae!

Até a próxima!

Para ele naum apagar o arquivo tenta fazer assim

File arquivo = new File ("config.ini");//Nome do arquivo  que ira usar
	    try {
	    	
	    	FileReader reader = new FileReader(arquivo);  
	    	BufferedReader leitor = new BufferedReader(reader);
          
             String linha;  
   
             while(leitor.ready()){  
                 linha = leitor.readLine();  
                       
                if(linha.startsWith("SERVIDOR:"))  
                     setEndServer(linha);  
                       
                 if(linha.startsWith("PORTA:"))  
                     setPorta(linha);  
                 }  
             } catch (FileNotFoundException e) {  
                 JOptionPane.showMessageDialog(null,   
                         "Arquivo de configurações não foi encontrado. Favor entrar em contato com o administrador do sistema.",   
                         "Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);  
             }catch (IOException e) {  
                 e.printStackTrace();  
             }   

Ae caso queira gravar use o metodo


public static void CriaArquivo(String arquivo, String conteudo){
		try{
			
		FileWriter writer = new FileWriter(arquivo);  
    	PrintWriter saida = new PrintWriter(writer);	
    	
    	  saida.println(conteudo); //Aqui eh oque ira escrever 
    	  
    	  
    	saida.close();  
    	writer.close(); 
    	   
		}catch (FileNotFoundException e) {
			JOptionPane.showMessageDialog(null, 
    				"Arquivo de configurações não foi encontrado. Favor entrar em contato com o administrador do sistema.", 
    				"Arquivo não encontrado", JOptionPane.ERROR_MESSAGE);
		}catch (IOException e) {
			e.printStackTrace();
		}

Ahh quando postei vc ja tinha postado a solucao :expressionless: demorei muito