Como ler dados de um ficheiro

20 respostas
Vanilson

Pessoal td bem, bem eu gostaria de saber que passos devo dar para ler dados de um ficheiro eu pretendo usar a classe FileReader, so que não sei como começar a ler dados do ficheiro, não quero codigo feito, apenas uma explicação.

20 Respostas

renamed

A partir do Java 5, é melhor realizar a leitura de arquivos com a classe Scanner…

Scanner sc = new Scanner(new File("CAMINHO"));

utilize o método hasnext pra saber se ainda há entradas e nextLine para ler linha por linha.

Se vc realmente quer usar FileReader… vc terá de criar e instanciar um objeto de tipo BufferedReader, que recebe como parâmetro um FileReader que, por sua vez, recebe o caminho do arquivo no seu construtor… veja

BufferedReader bf = new BufferedReader(new FileReader("CAMINHO"));

Utilize o método readLine para ler linha por linha… esse método retornará null ao final do arquivo…

Não se esqueça de sempre fechar o arquivo após a leitura… ok?

Vanilson

Refereste a que entradas?
Sobre o Scanner eu sei que ele pode ser usado para dar entrada de dados, mas para o caso de ficheiro ele é usado com que finalidade?
E se eu usar o bufferedreader tenho que usar o scanner?

manolimars
public void lerArquivo()
    {
        try
        {
            String linha = null;
            FileReader fr = new FileReader("Dados.txt");
            BufferedReader br = new BufferedReader(fr);

            while((linha=br.readLine()) != null)
            {
                System.out.println(linha); //imprime na tela o que está sendo lendo
            }
         }
        catch(IOException exc)
        {
            System.out.println("Não foi possível ler seu arquivo");
        }

    }
Vanilson
while((linha=br.readLine()) != null)

Não compreendi esta linha, e por outro lado testei o teu codigo e ele so executa o que está dentro do catch.

manolimars
while((linha=br.readLine()) != null)
// enquanto a linha lida for diferente de null

// isso vai fazer com que leia linha por linha
// e parar depois de ler a ultima linha,
// pois "linha" vai ser igual a null

o catch está sendo executado pois certamente não está sendo localizado o seu arquivo,
para ele poder ler, primeiro ele deve ser criado

Vanilson

Cara era mesmo esse o erro.
Agora acontece o seguinte, eu estou a tentar fazer o automatismo de um codigo, o que eu pretendo fazer é q o nr de vezes que contar as linhas eu vou incrementando uma variavel, assim eu vou obter semrpre o ultimo codigo e dai incremento mais um, eis o codigo:

public cadastrarcliente(int j)
	{
		super("..:BPC:..Cadastrar Cliente");
		constrform(j);
		setVisible(true);
		setSize(250,250);
		setResizable(false);
		setLocationRelativeTo(null);
		pack();		
	}
	public int codigoutomatico()
	{
			try  
			{  
				int i=0;
				String linha = null;  
				FileReader fr = new FileReader("clientes.txt");  
				BufferedReader br = new BufferedReader(fr);  
 
				while((linha=br.readLine()) != null)  
				{  
					return i++;
				}  
				br.close();
			}	  
			catch(IOException exc)  
			{  
				JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE); 
			} 
	}Apresenta erro aqui.
	public void constrform(int h)
	{
		painellabeltext = new JPanel();
		painellabeltext.setLayout(new GridLayout(6,2));
		lblcodcliente = new JLabel("Codigo do Cliente", lblcodcliente.RIGHT);
		lblnome = new JLabel("Nome", lblnome.RIGHT);
		lblbairro = new JLabel("Bairro", lblbairro.RIGHT);
		lbllocalidade = new JLabel("Localidade", lbllocalidade.RIGHT);
		lbldata = new JLabel("Data", lbldata.RIGHT );
		lblvalor = new JLabel("Valor", lblvalor.RIGHT);
	
		txtcodcliente = new JTextField();
		txtcodcliente.setText((h+1)+"");
		//txtcodcliente.getText();

		txtnome = new JTextField();
		//txtnome.geText();

		//if (txtnome.getString().trim().length())
			//JOptionPane.showMessageDialog(null,"Por favor informe o seu nome");
		txtbairro = new JTextField();
		//txtbairro.geText();

		localidade = new JComboBox(localidades);
		//localidade.geText();

		txtdata = new JTextField(criaData());//Adiciona data a JTextField    
		txtdata.setEnabled(false);
		//txtdata.geText();
		
		txtvalor = new JTextField();
		//txtvalor.setSize(8,8);
		txtvalor.setDocument(new validacarecteres()); 
		//txtvalor.geText();

		cadastrar = new JButton("Cadastrar");
		cadastrar.addActionListener(this);
		cancelar = new JButton("Cancelar");
		cancelar.addActionListener(this);

		painellabeltext.add(lblcodcliente);
		painellabeltext.add(txtcodcliente);

		painellabeltext.add(lblnome);
		painellabeltext.add(txtnome);

		painellabeltext.add(lblbairro);
		painellabeltext.add(txtbairro);
		
		painellabeltext.add(lbllocalidade);
		painellabeltext.add(localidade);
		
		painellabeltext.add(lbldata);
		painellabeltext.add(txtdata);

		painellabeltext.add(lblvalor);
		painellabeltext.add(txtvalor);
		
		painelbotoes = new JPanel();
		painelbotoes.add(cadastrar);
		painelbotoes.add(cancelar);
		
		
		getContentPane().add(painellabeltext,BorderLayout.CENTER);
		getContentPane().add(painelbotoes, BorderLayout.SOUTH);
				 	
	}
        public static void main(String args[])
	{
		int v;
		v = 0;
		new cadastrarcliente(v);		
	}

O que acontence é que ele apresenta erro na ultima chaveta do metodo codigoautomatico, alguem sabe o pq deste erro.

Vanilson

Bem pessoal fiz uma pequena alteração no metodo codigoautomatico e ficou assim:

public int codigoutomatico()
	{
                        int codigo = 0;
			try  
			{  

				String linha = null;  
				FileReader fr = new FileReader("clientes.txt");  
				BufferedReader br = new BufferedReader(fr);  
 
				while((linha=br.readLine()) != null)  
					codigo++;
				br.close();
			}	  
			catch(IOException exc)  
			{  
				JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE); 
			}
			return codigo;
	}

O que acontece é que ele esta sempre a retornar zero, ou seja ele não entra no bloco try.

manolimars
//Fiz um teste aqui, compilei o seu código e ele me retornou a quantidade de linhas que foi lida;

//seu arquivo "clientes.txt" tem alguma coisa gravado dentro dele?? ele retorna ZERO '0', caso não tenha nenhum dado gravado nele;

// Outra coisa, voce não chamou em nenhum momento seu método dentro do seu código,
// pode fazer assim no seu código:

int a = codigoAutomatico();
//'a' vai receber o retorno do método codigoAutomático()


	public int codigoAutomatico() //observar que esqueceu do "A", mas isso é detalhe =D, tava codigoUtomatico()
	{
                        int codigo = 0;
			try  
			{  
				String linha = null;  
				FileReader fr = new FileReader("clientes.txt");  
				BufferedReader br = new BufferedReader(fr);  
 
				while((linha=br.readLine()) != null) 
                                {
					codigo++;
                                }

				br.close();
			}	  
			catch(IOException exc)  
			{  
				JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE); 
			}
			return codigo;
	}
Vanilson

Cara, mais aonde passo é “a”, como uso ele?

manolimars

bom, no seu código, voce apenas criou o método “codigoAutomatico()”, mas não utilizou ele,

int variavelDeRetornoDoMetodo = codigoAutomatico();

a “variavelDeRetornoDoMetodo” vai receber o valor de linhas contadas,
utilizando o seu método criado o “return codigo” é quem vai retornar este valor

Vanilson

Cara, usei o q tu me dizeste e está a acontecer o msmo, eis o codigo:

int a = codigoautomatico();
	public cadastrarcliente(int j)
	{
		super("..:BPC:..Cadastrar Cliente");
		constrform(j);
		setVisible(true);
		setSize(250,250);
		setResizable(false);
		setLocationRelativeTo(null);
		pack();		
	}
public int codigoautomatico()
	{
			int codigo = 0;
			try  
			{  

				String linha = null;  
				FileReader fr = new FileReader("clientes.txt");  
				BufferedReader br = new BufferedReader(fr);  
 
				while((linha=br.readLine()) != null)  
					codigo++;
				br.close();
			}	  
			catch(IOException exc)  
			{  
				//JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE); 
				System.out.println(exc.getMessage());
			}
			return codigo;
	}
	public void constrform(int h)
	{
		painellabeltext = new JPanel();
		painellabeltext.setLayout(new GridLayout(6,2));
		lblcodcliente = new JLabel("Codigo do Cliente", lblcodcliente.RIGHT);
		lblnome = new JLabel("Nome", lblnome.RIGHT);
		lblbairro = new JLabel("Bairro", lblbairro.RIGHT);
		lbllocalidade = new JLabel("Localidade", lbllocalidade.RIGHT);
		lbldata = new JLabel("Data", lbldata.RIGHT );
		lblvalor = new JLabel("Valor", lblvalor.RIGHT);
	
		txtcodcliente = new JTextField();
		txtcodcliente.setText((h+1)+"");
		//txtcodcliente.getText();

		txtnome = new JTextField();
		//txtnome.geText();

		//if (txtnome.getString().trim().length())
			//JOptionPane.showMessageDialog(null,"Por favor informe o seu nome");
		txtbairro = new JTextField();
		//txtbairro.geText();

		localidade = new JComboBox(localidades);
		//localidade.geText();

		txtdata = new JTextField(criaData());//Adiciona data a JTextField    
		txtdata.setEnabled(false);
		//txtdata.geText();
		
		txtvalor = new JTextField();
		//txtvalor.setSize(8,8);
		txtvalor.setDocument(new validacarecteres()); 
		//txtvalor.geText();

		cadastrar = new JButton("Cadastrar");
		cadastrar.addActionListener(this);
		cancelar = new JButton("Cancelar");
		cancelar.addActionListener(this);

		painellabeltext.add(lblcodcliente);
		painellabeltext.add(txtcodcliente);

		painellabeltext.add(lblnome);
		painellabeltext.add(txtnome);

		painellabeltext.add(lblbairro);
		painellabeltext.add(txtbairro);
		
		painellabeltext.add(lbllocalidade);
		painellabeltext.add(localidade);
		
		painellabeltext.add(lbldata);
		painellabeltext.add(txtdata);

		painellabeltext.add(lblvalor);
		painellabeltext.add(txtvalor);
		
		painelbotoes = new JPanel();
		painelbotoes.add(cadastrar);
		painelbotoes.add(cancelar);
		
		
		getContentPane().add(painellabeltext,BorderLayout.CENTER);
		getContentPane().add(painelbotoes, BorderLayout.SOUTH);
				 	
	}
public static void main(String args[])
	{
		int v = 0;
		new cadastrarcliente(v);		
	}
}
manolimars
//voce deve chamar o método CodigoAutomatico() dentro de outro método

public cadastrarcliente(int j)
	{
		super("..:BPC:..Cadastrar Cliente");
		constrform(j);
		setVisible(true);
		setSize(250,250);
		setResizable(false);
		setLocationRelativeTo(null);
                JOptionPane.showMessageDialog(null, "Número de Linhas Dentro do Arquivo é: "+codigoAutomatico());
//retorna o valor do método em uma JOptionPane
//lembrando que se o arquivo estiver VAZIO vai retornar "ZERO"
		pack();		
	}
Vanilson

Cara funcionou, eis o codigo:

public cadastrarcliente(int j)
	{
		super("..:BPC:..Cadastrar Cliente");
		constrform(j);
		setVisible(true);
		setSize(250,250);
		setResizable(false);
		setLocationRelativeTo(null);
		pack();		
	}
	public int codigoautomatico()
	{
			int codigo = 1;
			try  
			{  

				String linha = null;  
				FileReader fr = new FileReader("clientes.txt");  
				BufferedReader br = new BufferedReader(fr);  
 
				while((linha=br.readLine()) != null)  
					codigo++;
				br.close();
			}	  
			catch(IOException exc)  
			{  
				JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE); 
			}
			return codigo;
	}
	public void constrform(int h)
	{
		painellabeltext = new JPanel();
		painellabeltext.setLayout(new GridLayout(6,2));
		lblcodcliente = new JLabel("Codigo do Cliente", lblcodcliente.RIGHT);
		lblnome = new JLabel("Nome", lblnome.RIGHT);
		lblbairro = new JLabel("Bairro", lblbairro.RIGHT);
		lbllocalidade = new JLabel("Localidade", lbllocalidade.RIGHT);
		lbldata = new JLabel("Data", lbldata.RIGHT );
		lblvalor = new JLabel("Valor", lblvalor.RIGHT);
	
		txtcodcliente = new JTextField();
		txtcodcliente.setText((a+1)+"");
		txtcodcliente.setEnabled(false);
		//txtcodcliente.getText();

		txtnome = new JTextField();
		//txtnome.geText();

		//if (txtnome.getString().trim().length())
			//JOptionPane.showMessageDialog(null,"Por favor informe o seu nome");
		txtbairro = new JTextField();
		//txtbairro.geText();

		localidade = new JComboBox(localidades);
		//localidade.geText();

		txtdata = new JTextField(criaData());//Adiciona data a JTextField    
		txtdata.setEnabled(false);
		//txtdata.geText();
		
		txtvalor = new JTextField();
		//txtvalor.setSize(8,8);
		txtvalor.setDocument(new validacarecteres()); 
		//txtvalor.geText();

		cadastrar = new JButton("Cadastrar");
		cadastrar.addActionListener(this);
		cancelar = new JButton("Cancelar");
		cancelar.addActionListener(this);

		painellabeltext.add(lblcodcliente);
		painellabeltext.add(txtcodcliente);

		painellabeltext.add(lblnome);
		painellabeltext.add(txtnome);

		painellabeltext.add(lblbairro);
		painellabeltext.add(txtbairro);
		
		painellabeltext.add(lbllocalidade);
		painellabeltext.add(localidade);
		
		painellabeltext.add(lbldata);
		painellabeltext.add(txtdata);

		painellabeltext.add(lblvalor);
		painellabeltext.add(txtvalor);
		
		painelbotoes = new JPanel();
		painelbotoes.add(cadastrar);
		painelbotoes.add(cancelar);
		
		
		getContentPane().add(painellabeltext,BorderLayout.CENTER);
		getContentPane().add(painelbotoes, BorderLayout.SOUTH);
				 	
	}

Mas agora acontence o seguinte, depois de eu inserir os dados no ficheiro, e ele mandar a mensagem a dizer que os dados foram gravados com sucesso, o codigo continua a ser o msmo, ou seja ele so altera caso eu fechar a frame, mas eu gostaria que ele altera-se o codigo assim que eu pressiona-se no botão da mensagem.

manolimars

como você está gravando seus dados no ficheiro?

Vanilson

Inicialmente eu mando os dados inseridos pelo usuario numa classe objcliente de seguida ele vai a uma outra classe aonde encontram-se as operações necessarias para adicionar os dados ao ficheiro

classe cadastrarcliente.java

public void actionPerformed(ActionEvent event)
	{
		if(event.getSource()==cadastrar)
		{

			objcliente cliente = new objcliente();//Instanciamento do JAVABEAN
			if(txtnome.getText().trim().equals(""))
			{
				JOptionPane.showMessageDialog(null,"Por favor informe o nome do(a) cliente","BPC",JOptionPane.INFORMATION_MESSAGE);
				txtnome.grabFocus();
			}
			else
				if(txtbairro.getText().trim().equals(""))
				{
					JOptionPane.showMessageDialog(null,"Por favor informe o o bairro do(a) cliente","BPC",JOptionPane.INFORMATION_MESSAGE);
					txtbairro.grabFocus();
				}
			else
				if(txtvalor.getText().trim().equals(""))
				{
					JOptionPane.showMessageDialog(null,"Por favor informe o valor","BPC",JOptionPane.INFORMATION_MESSAGE);
					txtvalor.grabFocus();
				}

			else
			{
				cliente.setcodigo(Integer.parseInt(txtcodcliente.getText()));
				cliente.setnome(txtnome.getText());
				cliente.setbairro(txtbairro.getText());
				cliente.setlocalidade((String) localidade.getSelectedItem());//Casting de localidade
				cliente.setdata(txtdata.getText());
				cliente.setvalor(Double.parseDouble(txtvalor.getText()));

				new operacoes().adiciona(cliente);//Instancia a classe operações e nessa referencia vai chamar o metodo adiciona
				//dispose();
				//txtcodcliente.setText((a+1)+"");
				txtnome.setText("");
				txtbairro.setText("");
				txtvalor.setText("");
			}

		}
		else
			if(event.getSource()==cancelar)
			{
				dispose();
			}
		
	}

Classe objcliente.java

import java.util.*;
class objcliente
{

	private int codigo;
	private String nome;
	private String bairro;
	private String localidade;
	private String data;
	private double valor;
	public int getcodigo()
	{
		return codigo;
	}
	public void setcodigo(int codigo)
	{
		this.codigo = codigo;
	}
	public String getnome()
	{
		return nome;
	}
	public void setnome(String nome)
	{
		this.nome = nome;
	}

	public String getbairro()
	{
		return bairro;
	}
	public void setbairro(String bairro)
	{
		this.bairro = bairro;
	}

	public String getlocalidade()
	{
		return localidade;
	}
	public void setlocalidade(String localidade)
	{
		this.localidade = localidade;
	}

	public String getdata()
	{
		Calendar data = Calendar.getInstance();
		return data.get(5) + "/" + data.get(2) + "/" + data.get(1);
	}
	public void setdata(String data)
	{
		this.data = data;
	}

	public double getvalor()
	{
		return valor;
	}
	public void setvalor(double valor)
	{
		this.valor = valor;
	}

}

Classe operacoes.java

import java.io.*;
import javax.swing.JOptionPane;
public class operacoes
{
	private String ficheiro = "clientes.txt";
	FileWriter fichcliente = new FileWriter(ficheiro,true);
	public void adiciona(objcliente adicionar)
	{
		try
		{
			fichcliente.write(adicionar.getcodigo()+"");	
			fichcliente.write("|");	
			fichcliente.write(adicionar.getnome());
			fichcliente.write("|");
			fichcliente.write(adicionar.getbairro());
			fichcliente.write("|");
			fichcliente.write(adicionar.getlocalidade());
			fichcliente.write("|");
			fichcliente.write(adicionar.getdata());
			fichcliente.write("|");
			fichcliente.write(adicionar.getvalor()+"");
			fichcliente.write("\r\n");
			JOptionPane.showMessageDialog(null,"O cliente " + adicionar.getnome() + " foi com sucesso","BPC",JOptionPane.INFORMATION_MESSAGE);
			//System.out.println(fichcliente.read());
			fichcliente.close();
		} 
		catch (IOException e) 
		{
			JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE);
		}
		
	}
}
manolimars

as sua Classe Principal, onde monta a interface gráfica, defina isso junto com as outras variaveis:

public static int codigoAtual=0;
//esta vai ser a variavel que terá sempre a quantidade de clientes cadastrados

Fiz uma modificação na sua classe operações

package controleestoquemedalhas;

import java.io.*;
import javax.swing.JOptionPane;

public class operacoes
{
    private String ficheiro = "clientes.txt";
    FileWriter fichcliente = null;

    public void adiciona(objectcliente adicionar)
    {
        try
        {
            fichcliente = new FileWriter(ficheiro,true);
            //Cria o FileWriter dentro do Try, pois pode ocorrer Exception
            fichcliente.write(adicionar.getcodigo()+"");
            fichcliente.write("|");	
            fichcliente.write(adicionar.getnome());
            fichcliente.write("|");
            fichcliente.write(adicionar.getbairro());
            fichcliente.write("|");
            fichcliente.write(adicionar.getlocalidade());
            fichcliente.write("|");
            fichcliente.write(adicionar.getdata());
            fichcliente.write("|");
            fichcliente.write(adicionar.getvalor()+"");
            fichcliente.write("\r\n");
            fichcliente.close();
            JOptionPane.showMessageDialog(null,"O cliente " + adicionar.getnome() + " foi adicionado com sucesso","BPC",JOptionPane.INFORMATION_MESSAGE);
            //Sempre que voce gravar um dado no ficheiro, o metodo codigo automatico vai entrar no seu arquivo
            //e retornar a quantidade de linhas contadas
            SuaClassePrincipal.codigoAtual =  SuaClassePrincipal().codigoautomatico();
            //assim voce não precisara fechar e abrir novamente o seu projeto para contar as linhas
        }
        
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null,"Erro ao gravar no ficheiro","BPC",JOptionPane.ERROR_MESSAGE);
        }
    }
}
Vanilson

Cara não está a funcionar, fiz o seguinte:

Classe operacoes.java

public void adiciona(objcliente adicionar)
	{
		try
		{
			fichcliente = new FileWriter(ficheiro,true);
			fichcliente.write(adicionar.getcodigo()+"");	
			fichcliente.write("|");	
			fichcliente.write(adicionar.getnome());
			fichcliente.write("|");
			fichcliente.write(adicionar.getbairro());
			fichcliente.write("|");
			fichcliente.write(adicionar.getlocalidade());
			fichcliente.write("|");
			fichcliente.write(adicionar.getdata());
			fichcliente.write("|");
			fichcliente.write(adicionar.getvalor()+"");
			fichcliente.write("\r\n");
			JOptionPane.showMessageDialog(null,"O cliente " + adicionar.getnome() + " foi com sucesso","BPC",JOptionPane.INFORMATION_MESSAGE);
			constrform.codigoAtual = constrform().codigoautomatico(); 
			//System.out.println(fichcliente.read());
			fichcliente.close();
		} 
		catch (IOException e) 
		{
			JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE);
		}	
	}

Classe cadastrarcliente.java

public class cadastrarcliente extends JFrame implements ActionListener 
{
	private JLabel lblcodcliente, lblnome, lblbairro,lbllocalidade, lbldata, lblvalor;
	private JTextField txtcodcliente, txtnome, txtbairro, txtdata, txtvalor;
	String[] localidades ={"Bengo","Benguela","Bié","Cabinda","Cuando-Cubango","Cunene","Kwanza-Norte","Kwanza-Sul","Huambo","Huíla","Luanda","Lunda-Norte","Lunda-Sul","Malanje","Moxico","Namibe","Uíge","Zaire"};
	private JComboBox localidade;
	private JPanel formcliente,painelbotoes,painellabeltext;
	private JButton cadastrar, cancelar;
	public static int codigoAtual=0;
	int a = codigoautomatico();
	public cadastrarcliente(int j)
	{
		super("..:BPC:..Cadastrar Cliente");
		constrform(j);
		setVisible(true);
		setSize(250,250);
		setResizable(false);
		setLocationRelativeTo(null);
		pack();		
	}
	public int codigoautomatico()
	{
			int codigo = 1;
			try  
			{  

				String linha = null;  
				FileReader fr = new FileReader("clientes.txt");  
				BufferedReader br = new BufferedReader(fr);  
 
				while((linha=br.readLine()) != null)  
					codigo++;
				br.close();
			}	  
			catch(IOException exc)  
			{  
				JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE); 
			}
			return codigo;
	}
	public void constrform(int h)
	{
		painellabeltext = new JPanel();
		painellabeltext.setLayout(new GridLayout(6,2));
		lblcodcliente = new JLabel("Codigo do Cliente", lblcodcliente.RIGHT);
		lblnome = new JLabel("Nome", lblnome.RIGHT);
		lblbairro = new JLabel("Bairro", lblbairro.RIGHT);
		lbllocalidade = new JLabel("Localidade", lbllocalidade.RIGHT);
		lbldata = new JLabel("Data", lbldata.RIGHT );
		lblvalor = new JLabel("Valor", lblvalor.RIGHT);
	
		txtcodcliente = new JTextField();
		txtcodcliente.setText((a+1)+"");
		txtcodcliente.setEnabled(false);
		//txtcodcliente.getText();

		txtnome = new JTextField();
		//txtnome.geText();

		//if (txtnome.getString().trim().length())
			//JOptionPane.showMessageDialog(null,"Por favor informe o seu nome");
		txtbairro = new JTextField();
		//txtbairro.geText();

		localidade = new JComboBox(localidades);
		//localidade.geText();

		txtdata = new JTextField(criaData());//Adiciona data a JTextField    
		txtdata.setEnabled(false);
		//txtdata.geText();
		
		txtvalor = new JTextField();
		//txtvalor.setSize(8,8);
		txtvalor.setDocument(new validacarecteres()); 
		//txtvalor.geText();

		cadastrar = new JButton("Cadastrar");
		cadastrar.addActionListener(this);
		cancelar = new JButton("Cancelar");
		cancelar.addActionListener(this);

		painellabeltext.add(lblcodcliente);
		painellabeltext.add(txtcodcliente);

		painellabeltext.add(lblnome);
		painellabeltext.add(txtnome);

		painellabeltext.add(lblbairro);
		painellabeltext.add(txtbairro);
		
		painellabeltext.add(lbllocalidade);
		painellabeltext.add(localidade);
		
		painellabeltext.add(lbldata);
		painellabeltext.add(txtdata);

		painellabeltext.add(lblvalor);
		painellabeltext.add(txtvalor);
		
		painelbotoes = new JPanel();
		painelbotoes.add(cadastrar);
		painelbotoes.add(cancelar);
		
		
		getContentPane().add(painellabeltext,BorderLayout.CENTER);
		getContentPane().add(painelbotoes, BorderLayout.SOUTH);
				 	
	}
manolimars

cara, faz o seguinte, me manda todo o seu código por MP
pra mim ter uma noção do que estás a fazer

manolimars

faça as seguintes modificações:

public static int codigoAtual=0;
//int a = codigoautomatico();//essa não vai precisar mais, pois vamos utilizar a esta de cima "codigoAtual"

public cadastrarcliente(int j)
	{
		super("..:BPC:..Cadastrar Cliente");
		codigoAtual=codigoAutomatico(); //coloque a inicialização aqui
		constrform(j);
		setVisible(true);
		setSize(250,250);
		setResizable(false);
		setLocationRelativeTo(null);
		pack();		
	}

e Esta outra modificação no adiciona

public void adiciona(objcliente adicionar)
	{
		try
		{
			fichcliente = new FileWriter(ficheiro,true);
			fichcliente.write(adicionar.getcodigo()+"");	
			fichcliente.write("|");	
			fichcliente.write(adicionar.getnome());
			fichcliente.write("|");
			fichcliente.write(adicionar.getbairro());
			fichcliente.write("|");
			fichcliente.write(adicionar.getlocalidade());
			fichcliente.write("|");
			fichcliente.write(adicionar.getdata());
			fichcliente.write("|");
			fichcliente.write(adicionar.getvalor()+"");
			fichcliente.write("\r\n");
			JOptionPane.showMessageDialog(null,"O cliente " + adicionar.getnome() + " foi com sucesso","BPC",JOptionPane.INFORMATION_MESSAGE);

			//constrform.codigoAtual = constrform().codigoautomatico();
			cadastrarcliente.codigoAtual = cadastrarcliente().codigoautomatico(); 

			//System.out.println(fichcliente.read());
			fichcliente.close();
		} 
		catch (IOException e) 
		{
			JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE);
		}	
	}
manolimars

cara, o erro estava dando quando iniciava o programa e lia o arquivo,
mesmo que o arquivo não tivesse nada, ele lia a primeira linha, agora eu fiz uma verificação:
se o arquivo estiver Vazio ele nem entra para fazer leitura.
De repente vc vai ter que criar um novo fiqueiro clientes.txt para ele ficar Vazio msm
Ahh, dei uma ajeitadinha em outras coisas tbm, mas veja se tá funcionando blz agora, testei e tudo ok :lol:,
segue o código:

nome do arquivo CadastrarCliente.java //cuidar nas letras maisculas e minusculas

import javax.swing.*;
import javax.swing.text.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import java.io.*;

public class CadastrarCliente extends JFrame implements ActionListener
{
	private JLabel lblcodcliente, lblnome, lblbairro,lbllocalidade, lbldata, lblvalor;
	private JTextField txtcodcliente, txtnome, txtbairro, txtdata, txtvalor;
	String[] localidades ={"Bengo","Benguela","Bié","Cabinda","Cuando-Cubango","Cunene","Kwanza-Norte","Kwanza-Sul","Huambo","Huíla","Luanda","Lunda-Norte","Lunda-Sul","Malanje","Moxico","Namibe","Uíge","Zaire"};
	private JComboBox localidade;
	private JPanel painelbotoes,painellabeltext;
	private JButton cadastrar, cancelar;
	public int codigoAtual=1; //o Código inicial é um, caso queira começar com Zero só mudar

	public CadastrarCliente()
	{
		super("..:BPC:..Cadastrar Cliente");
		constrform();
		setSize(250,250);
		setResizable(false);
		setLocationRelativeTo(null);
		pack();
                setVisible(true);
	}
	public void codigoautomatico()
	{
            try
            {
                String linha = new String("");
                File ficheiro = new File("clientes.txt");
                FileReader fr = new FileReader(ficheiro);
                BufferedReader br = new BufferedReader(fr);

                //O Erro estava dando neste Trecho, pois ele lia a primeira linha do arquivo
                //usando este if Abaixo, ele verifica se o ficheiro estiver vazio, ele não faz a contagem
                if(ficheiro.length()==0) //verifica se o Ficheiro está vazio
                {
                    JOptionPane.showMessageDialog(null, "Ficheiro VAZIO");
                }

                else
                {
                    while((linha=br.readLine())!= null)
                    {
                        codigoAtual++;
                    }
                }

                br.close();
            }
            
            catch(IOException exc)
            {
                JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE);
            }
        }
	public void constrform()
	{
            codigoautomatico();

            painellabeltext = new JPanel();
            painellabeltext.setLayout(new GridLayout(6,2));
            lblcodcliente = new JLabel("Codigo do Cliente", SwingConstants.RIGHT);
            lblnome = new JLabel("Nome", SwingConstants.RIGHT);
            lblbairro = new JLabel("Bairro", SwingConstants.RIGHT);
            lbllocalidade = new JLabel("Localidade", SwingConstants.RIGHT);
            lbldata = new JLabel("Data", SwingConstants.RIGHT );
            lblvalor = new JLabel("Valor", SwingConstants.RIGHT);
            txtcodcliente = new JTextField();
            txtcodcliente.setText(""+codigoAtual);
            txtcodcliente.setEditable(false);
            //txtcodcliente.getText();
            txtnome = new JTextField();
            //txtnome.geText();
            //if (txtnome.getString().trim().length())
            //JOptionPane.showMessageDialog(null,"Por favor informe o seu nome");
            txtbairro = new JTextField();
            //txtbairro.geText();
            localidade = new JComboBox(localidades);
            //localidade.geText();

            txtdata = new JTextField(criaData());//Adiciona data a JTextField
            txtdata.setEnabled(false);
            //txtdata.geText();
            txtvalor = new JTextField();
            //txtvalor.setSize(8,8);
            txtvalor.setDocument(new validacarecteres());
            //txtvalor.geText();

            cadastrar = new JButton("Cadastrar");
            cadastrar.addActionListener(this);
            cancelar = new JButton("Cancelar");
            cancelar.addActionListener(this);

            painellabeltext.add(lblcodcliente);
            painellabeltext.add(txtcodcliente);
            painellabeltext.add(lblnome);
            painellabeltext.add(txtnome);
            painellabeltext.add(lblbairro);
            painellabeltext.add(txtbairro);
            painellabeltext.add(lbllocalidade);
            painellabeltext.add(localidade);

            painellabeltext.add(lbldata);
            painellabeltext.add(txtdata);
            painellabeltext.add(lblvalor);
            painellabeltext.add(txtvalor);

            painelbotoes = new JPanel();
            painelbotoes.add(cadastrar);
            painelbotoes.add(cancelar);

            getContentPane().add(painellabeltext,BorderLayout.CENTER);
            getContentPane().add(painelbotoes, BorderLayout.SOUTH);

            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }

        String criaData()
	{
            Calendar data = Calendar.getInstance();
            return data.get(5) + "/" + data.get(2) + "/" + data.get(1);
	}
	//Classe que não permite que seja inserido caracteres na JTextField
	class validacarecteres extends PlainDocument
	{
        @Override
        public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
	{
            char digito;
            boolean numerico = true;
            
            for(int i = 0; i < str.length(); i++)
            {
                digito = str.charAt(i);

                if(!Character.isDigit(digito))
                {
                    numerico = false;
                    break;
                }
            }

            if(numerico)
                super.insertString(offs, str, a);
        }
        }

        public void actionPerformed(ActionEvent event)
	{
            if(event.getSource().equals(cadastrar))
            {
                ObjCliente cliente = new ObjCliente();//Instanciamento do JAVABEAN
                if(txtnome.getText().trim().equals(""))
                {
                    JOptionPane.showMessageDialog(null,"Por favor informe o nome do(a) cliente","BPC",JOptionPane.INFORMATION_MESSAGE);
                    txtnome.grabFocus();
                }

                else if(txtbairro.getText().trim().equals(""))
                {
                    JOptionPane.showMessageDialog(null,"Por favor informe o o bairro do(a) cliente","BPC",JOptionPane.INFORMATION_MESSAGE);
                    txtbairro.grabFocus();
                }

                else if(txtvalor.getText().trim().equals(""))
                {
                    JOptionPane.showMessageDialog(null,"Por favor informe o valor","BPC",JOptionPane.INFORMATION_MESSAGE);
                    txtvalor.grabFocus();
                }
                
                else
                {
                    cliente.setcodigo(Integer.parseInt(txtcodcliente.getText()));
                    cliente.setnome(txtnome.getText());
                    cliente.setbairro(txtbairro.getText());
                    cliente.setlocalidade((String) localidade.getSelectedItem());//Casting de localidade
                    cliente.setdata(txtdata.getText());
                    cliente.setvalor(Double.parseDouble(txtvalor.getText()));
                    
                    Operacoes cadastro = new Operacoes();
                    cadastro.adiciona(cliente);//Instancia a classe operações e nessa referencia vai chamar o metodo adiciona
                    //dispose();
                    codigoAtual++;
                    txtcodcliente.setText(""+codigoAtual);

                    txtnome.setText("");
                    txtbairro.setText("");
                    txtvalor.setText("");
                }
            }

            else if(event.getSource().equals(cancelar))
            {
                this.dispose();
            }
        }

        public static void main(String args[])
	{
            new CadastrarCliente();
	}
}

nome do arquivo Opercacoes.java //cuidar nas letras maiusculas

import java.io.*;
import javax.swing.JOptionPane;

public class Operacoes
{
    private String  ficheiro    =   "clientes.txt";
    FileWriter      fichcliente =   null;
    BufferedReader  br          =   null;
    FileReader      fr          =   null;
    
    public void adiciona(ObjCliente adicionar)
    {
        try
        {
            fichcliente = new FileWriter(ficheiro,true);
            fichcliente.write(adicionar.getcodigo()+"");
            fichcliente.write("|");
            fichcliente.write(adicionar.getnome());
            fichcliente.write("|");
            fichcliente.write(adicionar.getbairro());
            fichcliente.write("|");
            fichcliente.write(adicionar.getlocalidade());
            fichcliente.write("|");
            fichcliente.write(adicionar.getdata());
            fichcliente.write("|");
            fichcliente.write(adicionar.getvalor()+"");
            fichcliente.write("\r\n");

            JOptionPane.showMessageDialog(null,"O cliente " + adicionar.getnome() + " foi com sucesso","BPC",JOptionPane.INFORMATION_MESSAGE);
            //System.out.println(fichcliente.read());
            fichcliente.close();
        }
        catch (IOException e)
        {
            JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE);
        }
    }
    
    public void pesquisa(ObjCliente pesquisar)
    {
        try
        {
            String linha = null;
            fr = new FileReader(ficheiro);
            br = new BufferedReader(fr);

            while((linha=br.readLine())!=null)
            {
                if(linha.equals(pesquisar.getcodigo()+""))
                    JOptionPane.showMessageDialog(null,"O codigo inserido encotra-se no ficheiro","BPC",JOptionPane.ERROR_MESSAGE);//Mensagem de Teste
                else
                    JOptionPane.showMessageDialog(null,"O cliente com o codigo " + pesquisar.getcodigo() + " não se encontra cadastrado no sistema","BPC",JOptionPane.ERROR_MESSAGE);
            }
            
            br.close();
        }
        
        catch (IOException e)
        {
            JOptionPane.showMessageDialog(null,"Erro ao abrir o ficheiro","BPC",JOptionPane.ERROR_MESSAGE);
        }
    }
}

nome do arquivo ObjCliente.java //cuidar nas letras maiusculas

import java.util.*;

public class ObjCliente
{
    private int codigo;
    private String nome;
    private String bairro;
    private String localidade;
    private String data;
    private double valor;
    
    public int getcodigo()
    {
        return this.codigo;
    }

    public void setcodigo(int codigo)
    {
        this.codigo = codigo;
    }
    
    public String getnome()
    {
        return this.nome;
    }
    
    public void setnome(String nome)
    {
        this.nome = nome;
    }
    
    public String getbairro()
    {
        return this.bairro;
    }
    
    public void setbairro(String bairro)
    {
        this.bairro = bairro;
    }
    
    public String getlocalidade()
    {
        return this.localidade;
    }
    
    public void setlocalidade(String localidade)
    {
        this.localidade = localidade;
    }
    
    public String getdata()
    {
        Calendar data = Calendar.getInstance();
        return data.get(5) + "/" + data.get(2) + "/" + data.get(1);
    }

    public void setdata(String data)
    {
        this.data = data;
    }

    public double getvalor()
    {
        return this.valor;
    }

    public void setvalor(double valor)
    {
        this.valor = valor;
    }
}

se deu tudo certo, nao esqueça de colocar o [RESOLVIDO] no seu tópido

[]'s

Criado 19 de novembro de 2009
Ultima resposta 24 de nov. de 2009
Respostas 20
Participantes 3