Problema em abrir arquivo txt

7 respostas
R
tenho um problema na hora d abrir um arquivo txt, não sei o q fazer...ele só imprime a primeira linha do arquivo...
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.util.Scanner;
import java.awt.*;   
import java.awt.event.*;
import javax.swing.*;
 

public class Principal extends javax.swing.JFrame {
 
    /* atributos */
    private String nomeDoArquivo;
 
    /* construtor */
    public Principal(String nomeArquivo) {
        this.nomeDoArquivo = nomeArquivo;
    }
 
    /* métodos */
    public void inserirDados(String registro) {
        File fArquivo = null;
        try {
            fArquivo = new File(this.nomeDoArquivo);
            FileWriter fwArquivo = null;
 
            // Verifica se o arquivo existe
            // Se existir, ele abre par adicionar dados
            // se nao existir, ele cria o arquivo
            if (fArquivo.exists() == true) {
                fwArquivo = new FileWriter(fArquivo, true);
            } else {
                fwArquivo = new FileWriter(fArquivo);
            }
 
            BufferedWriter bw = new BufferedWriter(fwArquivo);
 
            //escreve o registro no arquivo e pula uma linha com o \n
            bw.write(registro + "\n");
 
            JOptionPane.showMessageDialog(null,"Registro adicionado com sucesso!");
 
            //fecha o arquivo
            bw.close();
            fwArquivo.close();
 
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Erro ao inserir linhas no arquivo: " + fArquivo);
        }
    }
 
    public void listarDados() {
        Scanner lendoArquivo = null;
        File arquivo = null;
        try {
            // abrindo o arquivo para leitura
            // se o arquivo nao existir será disparada uma exceção
            arquivo = new File(this.nomeDoArquivo);
            lendoArquivo = new Scanner(arquivo);
 
            // leia o arquivo linha por linha até chegar ao seu fim
            while (lendoArquivo.hasNextLine()) {
                this.SnippetFrame(lendoArquivo.nextLine());
            }
 
 
        } catch (FileNotFoundException e) { // tratando quando o arquivo nao existe
            JOptionPane.showMessageDialog(null,"Erro! Arquivo não existe: " + arquivo);
        } finally {
            // fechando o scanner
            try {
                lendoArquivo.close();
            } catch (Exception e) {
            }
        }
    }
 
 
  private void SnippetFrame(String linha){ 
        // toda linha do arquivo segue o formato:
        // nome:telefone
        if (linha != null) {
            // separando os campos através do delimitador ':'
            String[] campos = linha.split(":");
    // adiciona um componente 
    getContentPane().add(new JLabel ("Produto:"+campos[0]+"  Preço R$:"+campos[1]+"\n"));
 
    // Manda o Java calcular o melhor tamanho para o frame.
    pack();
    // Adiciona um evento para fechar a aplicação  
    addWindowListener(new WindowAdapter(){ 
        public void windowClosing(WindowEvent evt){ 
           System.exit(0);
         } 
    }); 
    setVisible(true); 
    menu();
  } 
}

    public void menu() {
        // 
        int op = 0;
        do {
          String i = JOptionPane.showInputDialog(null,"  ...::: Catálogo de produtos :::...\n\n"+
            "1 - Inserir produto\n"+
            "2 - Listar todos os produtos\n"+
            "3 - Sair\n\n"+
            "Entre com uma opção: \n", "Catálogo de produtos", JOptionPane.PLAIN_MESSAGE );
          op = Integer.parseInt(i);  

            switch (op) {
                case 1:
                    String nome = JOptionPane.showInputDialog(null,"Qual o nome do produto?",
                    "Inserindo produto", JOptionPane.QUESTION_MESSAGE);
   
                    String valor = JOptionPane.showInputDialog(null,"Qual o valor (em Reais)?",
                    "Inserindo valor", JOptionPane.QUESTION_MESSAGE);

                    this.inserirDados(nome + ":" + valor);
                    break;
                case 2:
                    this.listarDados();
                    break;
                case 3:
                    JOptionPane.showMessageDialog(null,"Obrigado por usar o Catálogo de Produtos!");
                    System.exit(0);  
                    break;
                default:
                    JOptionPane.showMessageDialog(null,"Opção inválida, tente novamente!");
            }
 
        } while (op != 3);
    }
 
    public static void main(String[] args) {
 
        Principal p = new Principal("produtos.txt");
 
        p.menu();

        new SnippetFrame();


    }
}

7 Respostas

ViniGodoy

No construtor faça:

Também dê uma lida em:
http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html

Tópico movido para interface gráfica.

ViniGodoy

Por favor, ao abrir tópico, não tente chamar atenção com expressões como “HELP!”, “SOCORRO” ou “URGENTE!”

R

ViniGodoy:
No construtor faça:

Também dê uma lida em:
http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html

Tópico movido para interface gráfica.

Desculpa mas eu ainda sou muito novato em java: comecei faz 2 meses :s

quando eu coloco no construtor aparece a seguinte mensagem:

Principal.java:21: cannot find symbol

symbol  : constructor BoxLayout()

location: class javax.swing.BoxLayout

getContentPane().setLayout(new BoxLayout());

^
ViniGodoy

Desculpe tem que ser:

R

Funcionou, ele organiza os dados, mas ele continua imprimindo somente a primeira linha do txt…será que tem algo a ver com o buffer?

R

eu andei estudando alguns artigos sobre buffer, parece que está correto, mas não entendo porque ele não lê as linhas subsequentes

E
// leia o arquivo linha por linha até chegar ao seu fim  
            while (lendoArquivo.hasNextLine()) {  
                this.SnippetFrame(lendoArquivo.nextLine());  
            }

Olhando o fluxo do seu programa, é um bocadinho confuso - você está chamando o método “menu” a cada linha lida do arquivo, o que realmente está muito esquisito.

Criado 11 de junho de 2012
Ultima resposta 12 de jun. de 2012
Respostas 7
Participantes 3