Erro manipulação arquivo txt

Olá eu tenho esse código q 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.JFrame;
import javax.swing.*;

public class Relatorio extends JFrame {
    
   public Connection con = null;   
   public Statement stm = null;   
   public ResultSet rs;       
   String nome = "";
    
    public Relatorio(){
    }
    
    public void adicionaString(){
    String nome = "Ricardo";
    String snome = "Marzano";
    
    String fim = String.format("%-4s\t %-4s\n",nome, snome);
    }
    
    public void setNome(String n){
        nome = n;
    }
    
    public void salvar(){
    String teste = "", t = "";
    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);
        System.out.println(teste);
        }//fim while
         
      
      }//fim try
      catch(Exception e)
      {
      JOptionPane.showMessageDialog(null,"Apresente este erro\nao desenvolvedor do sistema.","E R R O",JOptionPane.INFORMATION_MESSAGE);   
      //e.printStackTrace();
      }//fim catch

    try{
        File f = new File("c:\teste\relatorio.txt");
        FileWriter fw = new FileWriter(f);
        fw.write("Cod\tNome\tSobrenome \n\n");

        fw.write(teste);
        fw.close();// 
    } //fim 2º try
    catch (Exception e){
    System.out.println("Erro ao gravar no aquivo");
    }//fim 2º catch
 }//fim metodo salvar
    
    public Formatter arqS;
    
    public void salvar2(){
    Relatorio rel = new Relatorio();
    rel.setNome("Ricardo");
    
        try{
        arqS  = new Formatter("c:\teste\relat.txt");
        rel.setNome("Ricardo");
        arqS.format("%s", rel);
        } catch (Exception e){
    
    }
}

    public static void main (String args[]) throws FileNotFoundException {
        Relatorio a = new Relatorio();
        a.salvar();//é o 1º metodo
    }
}

e da o seguinte:

  • quando ele le no while do banco e imprime na tela pega tudo
  • na hora de gravar no arquivo ele só grava o ultimo registro
    e essa string formata fica ok…

Por favor se alguem souber onde esta o erro e puder me ajudar OK.

Obrigado por enquanto
Abraços
Ricardo

Cara, acredito que vai salvar no arquivo apenas o último registro mesmo.

Veja só, no while o conteúdo de teste é alterado a cada rs.next()

Você precisaria de um buffer que concatene tudo antes de salvar no arquivo, ou ir salvando a cada iteração do loop.

  • Sou iniciante também! Por tanto, pode não ser a solução ideal; :wink:

A ideia de salvar a cada iteração do loop é interessante, na verdade eu peguei a parte do filewriter e joguei dentro do while nao deu certo…
estou desesperado sem saber o que fazer…

obrigado mesmo assim

Ricardo

vc deve concatenar e não simplesmente jogar o valor pois este será sempre o último…

Boa tarde,

Aproveitando o tópico, gostaria de saber como abrir um arquivo txt existente no editor de texto, no caso o notepad, por um botão de uma aplicação desktop.

Tentei pelo código abaixo, poré ele retorna o seguinte erro:

java.io.IOException: Cannot run program “C:\TESTE\dir.txt”: CreateProcess error=193, %1 is not a valid Win32 application

        try {            
            Runtime.getRuntime().exec("C:\TESTE\dir.txt");  
        } catch (Exception e) {
            e.printStackTrace();
        }  

Alguém tem um sugestão?

Obrigado
:arrow:

Boa noite,

Para resolver o meu problema, crio um arquivo novo, com as informações novas e sobrescrevo o existente.
Abaixo segue trecho do código.

        String local = "d:\";
        try {
            // o true significa q o arquivo será constante   
            FileWriter x = new FileWriter("C:\TESTE\dir.dat", true);
            x.write(local); // armazena o texto no objeto x, que aponta para o arquivo            
            x.close(); // cria o arquivo  
            alterou = true;
            return alterou;
        } // em caso de erro apreenta mensagem abaixo   
        catch (Exception e) {
            e.printStackTrace();
            return false;
        }

Valew pessoal, mas se ainda alguem souber como abro um arquivo no notepad, sera bem útil.

Obrigado!

Olá,

Tive um problema deste semana passada, consegui resolver apenas habilitando o parametro append do construtor FileWriter. O código abaixo mostra o exemplo.

Com isso você cria um arquivo e vai adicionando informações ao arquivo criado.

 try{  
         File f = new File("c:\teste\relatorio.txt");  
         FileWriter fw = new FileWriter(f, true);  // adicione true no segundo argumento deste construtor
         fw.write("Cod\tNome\tSobrenome \n\n");  
   
         fw.write(teste);  
         fw.close();//   
     } //fim 2º try  

Oi pessoal,

Abaixo segue o fragmento do código usado para abrir qualquer aplicativo, arquivo ou programa em um programa java.

        try {
            Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL C:\TESTE\dir.txt"); // Ele abre o arquivo, no programa referenciado, no meu caso o notepad.
        } catch (Exception e) {
            e.printStackTrace();
        }

Um problema a menos :smiley:

rickzale, vc tem que salvar o arquivo a cada linha lida do banco. No final, teste só terá a última linha mesmo… É só adaptar o código:

...
File f = new File("c:\teste\relatorio.txt");  
FileWriter fw = new FileWriter(f);  
fw.write("Cod\tNome\tSobrenome \n\n"); 

while () {
  ...
  fw.write(teste);
}
fw.close();
...