Erro ao Ler Arquivo Externo Gerado pelo Sistema

Olá Pessoal, estou com dificuldade de fazer a leitura de um arquivo (txt) gerado pelo meu sistema repetidamente. Para ser mais claro, meu sistema gera orçamentos e depois permite visualizar ou imprimir esses orçamentos. O arquivo txt é gerado normalmente e quando se clica no botão imprimir aparecem as opções de impressão. Para a 1ª Vez tudo ocorre perfeitamente, mas para as vezes subsequentes ele não pega o conteúdo do novo arquivo gerado. Segue abaixo os código utilizados na classe principal e na classe Relatório.

Classe Principal

public String orcamento;
public List<OrcamentoBean> orcamentos;

    private void btImprimirActionPerformed(java.awt.event.ActionEvent evt) {                                           
        if (ro == null) {
            ro = new RelOrcamento();
            ro.setVisible(true);
        } else {
            ro.setVisible(true);
            ro.setState(NORMAL);
        }

        OrcamentoBean ob = new OrcamentoBean();
        orcamentos = new ArrayList();
        orcamento = tfOrcamento.getText() ;
        ob.setId(Integer.parseInt(orcamento));
        orcamentos.add(ob);
        gravaArquivo();

    }                                          

    private void gravaArquivo() {
        File f;
            try {
                f=new File("orcamento.txt");
                FileOutputStream fos = new FileOutputStream(f);
                String stringOrcamento = orcamento;
                try {
                    fos.write(stringOrcamento.getBytes());
                    fos.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
                
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            }       
    }

Relatório

import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.JasperPrint;
import java.io.*;

public class RelOrcamento extends javax.swing.JFrame {

    HashMap parametros;
    JasperPrint jp;
    JasperViewer jrv;
    ConexaoBD con_orcamentos;
    String orcamento;
    
    public RelOrcamento() {
        initComponents();
        leArquivo();
        tfCodOrcamento.setText(orcamento);
    }

    public void leArquivo() {

        try {
            BufferedReader in = new BufferedReader(new FileReader("orcamento.txt"));
            String str;
            while((str = in.readLine()) != null){
                //JOptionPane.showMessageDialog(null, str);
                orcamento = str;
            }
            in.close();
            }catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    private void btImprimirActionPerformed(java.awt.event.ActionEvent evt) {                                           
        if(cbServicos.isSelected()){
            try {
                con_orcamentos = new ConexaoBD();
                parametros = new HashMap();
                parametros.put("orcamento", Integer.parseInt(orcamento));
                jp = JasperFillManager.fillReport("./Relatorios/orcamento_serv.jasper", parametros, con_orcamentos.conecta());
                jrv = new JasperViewer(jp, false);
                jrv.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
                jrv.setVisible(true);
                jrv.setExtendedState(MAXIMIZED_BOTH);

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Erro ao Tentar Imprimir Relatório.");
                e.printStackTrace();
            }finally{
                con_orcamentos.desonecta();

            }             
            
        }else if(cbProdutos.isSelected()){
            try {
                con_orcamentos = new ConexaoBD();
                parametros = new HashMap();
                parametros.put("orcamento", Integer.parseInt(orcamento));
                jp = JasperFillManager.fillReport("./Relatorios/orcamento_prod.jasper", parametros, con_orcamentos.conecta());
                jrv = new JasperViewer(jp, false);
                jrv.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
                jrv.setVisible(true);
                jrv.setExtendedState(MAXIMIZED_BOTH);

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Erro ao Tentar Imprimir Relatório.");
                e.printStackTrace();
            }finally{
                con_orcamentos.desonecta();

            }            
            
        }else if(cbTotal.isSelected()){
            try {
                con_orcamentos = new ConexaoBD();
                parametros = new HashMap();
                parametros.put("orcamento", Integer.parseInt(orcamento));
                jp = JasperFillManager.fillReport("./Relatorios/orcamento.jasper", parametros, con_orcamentos.conecta());
                jrv = new JasperViewer(jp, false);
                jrv.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
                jrv.setVisible(true);
                jrv.setExtendedState(MAXIMIZED_BOTH);

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Erro ao Tentar Imprimir Relatório.");
                e.printStackTrace();
            }finally{
                con_orcamentos.desonecta();

            }
        }
    }

O que preciso é fazer com que o método leArquivo seja lido toda vez que a tela de relatórios seja aberta e que para cada orçamento pesquisado, ele busque as informações desse orçamento, o que não está acontecendo

Obrigado a todos