Erro gravar em arquivo texto FileWriter nãoi grava tudo

4 respostas
R

Olá
tenho esse código e esta dando uns erros:

import java.io.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.FileWriter;
import java.io.FileReader;
import java.util.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.*;
import javax.swing.*;
import javax.swing.JOptionPane;


public class Relatorio extends JFrame {
    
   public Connection con = null;   
   public Statement stm = null;   
   public ResultSet rs;       
   String nome = "";
   String teste = "", t = "";    

    public Relatorio(){
    }
    
    public void salvar(){
     String nc = "";
    float vlr = 0;
    String venc = "";
try  
      {  
         Class.forName("com.mysql.jdbc.Driver");
         con = DriverManager.getConnection("jdbc:mysql://localhost/dbsgod", "root", "");
         stm = con.createStatement();
         rs = stm.executeQuery("select * from contaextra");
	         
         while(rs.next()){
        nc = rs.getString(2);
        vlr = rs.getFloat(3);
        venc = rs.getString(4);

        teste = String.format("%-4s\t %4.2f\t %-4s\n", nc, vlr, venc);
    try{
        
        File f = new File("c:\\teste\\relatorio.txt");
        FileWriter fw = new FileWriter(f);
        fw.write("Cod\tNome\tSobrenome \n\n");
        fw.append(teste);
       // fw.write(teste);
        fw.close();// no arquivo que ele gera o\n fica um quadrinho e não salva todos os registros....
        //só o último registro
        
    } //fim 2º try
    catch (Exception e){
    System.out.println("Erro ao gravar no aquivo");
    }//fim 1º catch (do arquivo)
   System.out.println(teste);
    }//fim while
      }//fim do 1º try
      catch(Exception e)
      {
      JOptionPane.showMessageDialog(null,"Apresente este erro\nao desenvolvedor do sistema.","E R R O",JOptionPane.INFORMATION_MESSAGE);   
      //e.printStackTrace();
      }//fim 2º catch (da conexao ao banco)
 }//fim metodo salvar

    public static void main (String args[]) throws FileNotFoundException {
        Relatorio a = new Relatorio();
        a.salvar();
    }
}

O que acontece: - Ao gravar no arquivo, não grava tudo, só o ultimo registro vindo do banco…

  • e o “\n” não grava, grava um quadradinho…

eu tentei

fw.append(teste); ffw.write(teste);

e da o mesmo erro… O que pode ser?
Obrigado a todos por enquanto…

Ricardo

4 Respostas

rodrigo.bossini

Primeiro, tire a instanciação do objeto FileWriter de dentro do while.

Depois, “empacote” o fileWriter dentro de um BufferedWriter, ou PrintWriter, essas classes te fornecem métodos mais adequados, de mais alto nível.

Exemplo:

PrintWriter pw = new PrintWriter ( new FileWriter (new File (“path do arquivo”)));

ai seu pw te deixara usar metodos como println().

Outra, qdo terminar o while, faça: pw.flush(), pra certificar que todo o conteudo será salvo no arquivo, e feche o pw assim: pw.close().

Abraço.

anaperegrino

tente outra maneira.

R
Primeiro, tire a instanciação do objeto FileWriter de dentro do while.

Depois, "empacote" o fileWriter dentro de um BufferedWriter, ou PrintWriter, essas classes te fornecem métodos mais adequados, de mais alto nível.

Exemplo:

PrintWriter pw = new PrintWriter ( new FileWriter (new File ("path do arquivo")));

ai seu pw te deixara usar metodos como println().

Outra, qdo terminar o while, faça: pw.flush(), pra certificar que todo o conteudo será salvo no arquivo, e feche o pw assim: pw.close().

rod.attack
ficaria assim

try     
      {     
         Class.forName("com.mysql.jdbc.Driver");   
         con = DriverManager.getConnection("jdbc:mysql://localhost/dbsgod", "root", "");   
         stm = con.createStatement();   
         rs = stm.executeQuery("select * from contaextra");   
               
         while(rs.next()){   
        nc = rs.getString(2);   
        vlr = rs.getFloat(3);   
        venc = rs.getString(4);   
  
        teste = String.format("%-4s\t %4.2f\t %-4s\n", nc, vlr, venc);   
       System.out.println(teste);   
    }//fim while   
      }//fim do 1º try   
      catch(Exception e)   
      {   
      JOptionPane.showMessageDialog(null,"Apresente este erro\nao desenvolvedor do sistema.","E R R O",JOptionPane.INFORMATION_MESSAGE);     
      //e.printStackTrace();   
      }//fim 2º catch (da conexao ao banco)   
}//fim metodo salvar 
try{   
        PrintWriter pw = new PrintWriter ( new FileWriter (new File ("c:\\teste\\relatorio.txt")));    
         //gravo o quê?
         pw.flush()  
    } //fim 2º try   
    catch (Exception e){   
    System.out.println("Erro ao gravar no aquivo");   
    }//fim 1º catch (do arquivo)

Mais ou menos assim?

Abraços

T

Outra dica é encapsular seu FileWriter com um PrintWriter. Dessa forma, você escreve as linhas corretamente (com println ou printf ("%n") )

Criado 20 de fevereiro de 2009
Ultima resposta 25 de fev. de 2009
Respostas 4
Participantes 4