Ler um TXT com delimitadores

Estou encontrando problemas para ler um TXT onde contenha delimitadores.

Gravar foi beleza, agora ler ta dificil.

Alguém pode me ajudar?

[code]
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.StringTokenizer;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Agendinha extends JFrame implements ActionListener {
private JLabel lNome = new JLabel(“Nome”);
private JLabel lTele = new JLabel(“Telefone”);
private JLabel lEnde = new JLabel(“Endereço”);
private JButton b1 = new JButton(“Grava”);
private JButton b2 = new JButton(“Abre”);
private JTextField t1 = new JTextField("");
private JTextField t2 = new JTextField("");
private JTextField t3 = new JTextField("");
private String nome, endereco, telefone, nome_arquivo;
private JPanel P1;
private FileDialog Fabrir, Fsalvar;

public static void main(String[] args) {
    JFrame Tela = new Agendinha();
    Tela.setVisible(true);
    WindowListener x = new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    };
    Tela.addWindowListener(x);
}

Agendinha() {
    t1.setColumns(25);
    t2.setColumns(25);
    t3.setColumns(25);

    b1.addActionListener(this);
    b2.addActionListener(this);

    setTitle("Agenda Simples");
    setResizable(false);
    setSize(300, 220);
    setLocationRelativeTo(null);
    setAlwaysOnTop(true);
    getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
    Fabrir = new FileDialog(this, "Abrir arquivo", FileDialog.LOAD);
    Fsalvar = new FileDialog(this, "Salvar arquivo", FileDialog.SAVE);
    P1 = new JPanel();
    P1.setLayout(new FlowLayout(FlowLayout.CENTER));
    P1.add(b1);
    P1.add(b2);
    getContentPane().add(lNome);
    getContentPane().add(t1);
    getContentPane().add(lTele);
    getContentPane().add(t2);
    getContentPane().add(lEnde);
    getContentPane().add(t3);
    getContentPane().add(P1);
}

public void actionPerformed(ActionEvent e) {
    if (e.getSource() == b1) {
        try {
            nome = t1.getText();
            telefone = t2.getText();
            endereco = t3.getText();

            Fsalvar.setVisible(true);
            if (Fsalvar.getFile() == null)
                return;
            nome_arquivo = Fsalvar.getDirectory() + Fsalvar.getFile();
            FileWriter out = new FileWriter(nome_arquivo);
            out.write(nome + ";" + telefone + ";" + endereco);

// out.write(telefone);
// out.write(endereco);
out.close();
t1.setText("");
t2.setText("");
t3.setText("");
} catch (Exception exc) {
JOptionPane.showMessageDialog(null, “Ocorreu um Erro de Gravação”,
“Operação Não Realizada”, JOptionPane.ERROR_MESSAGE);
}
}
if (e.getSource() == b2) {
try {
Fabrir.setVisible(true);
if (Fabrir.getFile() == null)
return;
nome_arquivo = Fabrir.getDirectory() + Fabrir.getFile();
FileReader in = new FileReader(nome_arquivo);
String T = “”;
int i = in.read();
while (i != -1)
{
T = T + (char)i;
i = in.read();
}
// t1.setText(T);
StringTokenizer st = new StringTokenizer(T, “;”);
while (st.hasMoreTokens())
System.out.println("Cada registro em separadao>> " +
st.nextToken());
t1.setText(T);
} catch (Exception exc2) {
JOptionPane.showMessageDialog(null, “Ocorreu um Erro ao Tentar Abrir”,
“Operação Não Realizada”, JOptionPane.ERROR_MESSAGE);
}
}
}
}[/code]

O meu problema ta neste trecho

if (e.getSource() == b2) { try { Fabrir.setVisible(true); if (Fabrir.getFile() == null) return; nome_arquivo = Fabrir.getDirectory() + Fabrir.getFile(); FileReader in = new FileReader(nome_arquivo); String T = ""; int i = in.read(); while (i != -1) { T = T + (char)i; i = in.read(); } // t1.setText(T); StringTokenizer st = new StringTokenizer(T, ";"); while (st.hasMoreTokens()) System.out.println("Cada registro em separadao>> " + st.nextToken()); t1.setText(T);

Fico no aguardo da ajuda de vocês.

Beleza, o seu problema esta “nesse trecho”… mas qual eh o problema mais exatamente?

Rafael

Rafael…

Cara desculpa minha falha.

a dúvida persiste no seguite.

no 1° try, eh gravado um txt, com os seguintes dados:
nome, telefone, enredeço.

Nesta ordem, com um delimitador separando cada dado, no caso usei “;”.

Agora eu queria fazer com que se fosse aberto o txt, ele jogasse essa informações devolta nos campos.

aqui segue a telinha.

Bom, primeiro, para ler um arquivo texto, BufferedReaders sao melhores que simples FileReaders. Portanto, um codigo como o a seguir eh mais bem rapido:

BufferedReader reader = new BufferedReader(new FileReader("arquivo.txt"));

StringBuffer sb = new StringBuffer();

int c = -1;
char[] ch = new char[4096];

while ((c = reader.read(ch)) != -1) {
    sb.append(new String(ch, 0, c));
}

reader.close();

Porem, no seu caso, vou assumr que existe 1 registro por linha. Nesse caso, um reader.readLine() torna a tua vida BEM mais facil. O while() fica assim:

String line = null;

while ((line = reader.readLine()) != null) {
    // trabalhe com a linha atual
}

entao, tendo a linha, vc pode dar um split() (ou, caso prefira, usar um StringTokenizer) e jogar aonde quiser. Algo como

// trabalhe com a linha atual
String[] partes = linha.split(";");

// Agora vc tem o array com os dados.. jogue onde quiser

Rafael

Rafael…

muito obrigado mesmo.

Explicação fantastica.

muito obrigado mesmo.

um abraço.

boa semana.

:smiley: :smiley: :smiley: :smiley: :smiley: