Poblemas com arquivos txt, poblema de recuperação deles

4 respostas
ZeTripe

Estou tentando montar um código em java que tem por objetivo, nesse método, cadastrar cliente e para isso primeiro estou carregando o conteúdo do arquivos txt
que são dados de cliente que ja foram cadastrados anteriormente, para uma ArrayList e logo após estou adicionando a ArrayList os dados do cliente que quero cadastrar na ação
mais justamente na hora de carregar os dados de cliente que estão no arquivo txt não está ocorrendo, e quando debugei o algoritmo sequer entro no while((valorLinha = leitorDados.readLine()) != null), estou começando agora nessa praia de programação java e não estou entendo esse erro. se alguem puder me ajudar ficaria grato, se for o caso eu passo o resto do algoritmo inteiro, obrigado desde já.

public final void cadastrarCliente() throws IOException{

		boolean continua=true;
		String nome="",cep="",profissao="",senha="";
		int idade=0,nConta=0;
		
		
		
			nome = JOptionPane.showInputDialog("Digite o nome do cliente");
			cep = JOptionPane.showInputDialog("Digite o cep");
			profissao = JOptionPane.showInputDialog("Digite a profissão");
			idade = Integer.parseInt(JOptionPane.showInputDialog("Digite a idade"));
			nConta = Integer.parseInt(JOptionPane.showInputDialog("Digite o número da conta para o cliente"));
			senha = JOptionPane.showInputDialog("Digite a senha");		
		
		
                Charset utf8 = StandardCharsets.UTF_8;
		Path caminhoDadosCliente = Paths.get("C:/Banco/DadosCliente.txt");
		BufferedWriter escritorDados = Files.newBufferedWriter(caminhoDadosCliente, utf8);
		BufferedReader leitorDados = Files.newBufferedReader(caminhoDadosCliente, utf8);
		
		ArrayList <String> dadosCliente = new ArrayList<>();
		
		if (Files.exists(caminhoDadosCliente)==true){
			
			String valorLinha = null;
			
			while((valorLinha = leitorDados.readLine()) != null){
				dadosCliente.add(valorLinha);			
				System.out.println(valorLinha);
			}
		
		}//final if
		
		dadosCliente.add(nome);
		dadosCliente.add(cep);
		dadosCliente.add(profissao);
		dadosCliente.add(String.valueOf(idade));
		dadosCliente.add(String.valueOf(nConta));
		dadosCliente.add(senha);
		
		int i=0;
		
		while(i < dadosCliente.size()){
			
			escritorDados.write(dadosCliente.get(i) + "\n");
			i++;
		}
		
		escritorDados.flush();
		escritorDados.close();		
	}
}

4 Respostas

javax.swing.Daniel

E ae ZeTripe! Acredito que isso seja o que você deseja:
Você faz a leitura do arquivo e depois salva por cima.
OBS: Na mesma pasta crie um arquivo com o seguinte nome e extensão: clientesBD.txt

import java.io.File;
import java.io.FileNotFoundException;

import java.util.Formatter;   
import java.util.FormatterClosedException;

import java.util.ArrayList;
import java.util.Scanner;

import javax.swing.JOptionPane;

public class ManipulaArquivo
{	
	private ArrayList<Cliente> listaClientes;
	private Cliente cliente;
	
	private Formatter gravacao;
	private Scanner leitura;	
	
	
	public ManipulaArquivo()
	{
		lerArquivo();		
	}

	private void gravarArquivo()
	{
		try
		{
			gravacao = new Formatter("clientesBD.txt");
			
			for(int i = 0; i < listaClientes.size(); i++)
			{
				cliente = listaClientes.get( i );		
				
				gravacao.format("%d %s\n", cliente.getId(), cliente.getNome() );
			}

			gravacao.close();
			
		}catch(FileNotFoundException erro)
		{
			System.out.println("Nao foi possivel criar o arquivo.");
		}catch ( FormatterClosedException formatterClosedException )
        {
                     
        } 	
	}
	
	private void lerArquivo()
	{
		listaClientes = new ArrayList<Cliente>();
			
		try
		{
			leitura = new Scanner( new File("clientesBD.txt") );
		
			while( leitura.hasNext() )
			{
				cliente = new Cliente();
				cliente.setId( leitura.nextInt() );
				cliente.setNome( leitura.next() );
				
				listaClientes.add( cliente );
			}
		}catch( FileNotFoundException erro )
		{
			System.out.println("Arquivo nao encontrado.");
		}finally
		{
			leitura.close();
		}
	}
	
	public void mostrarDados()
	{
		lerArquivo();
	
		System.out.printf("%s \t %s\n", "ID", "NOME");
		for(int i = 0; i < listaClientes.size(); i++)
		{
			cliente = listaClientes.get( i );
			System.out.printf("%d \t %s\n", cliente.getId(), cliente.getNome() );
		}		
	}
	
	public void inserirDados(int id, String nome)
	{
		lerArquivo();
	
		cliente = new Cliente( id, nome );
		
		listaClientes.add( cliente );		
		
		gravarArquivo();		
	}
	
	public static void main(String[] a)
	{
		ManipulaArquivo ma = new ManipulaArquivo();
		
		ma.mostrarDados();

		int id = Integer.parseInt( JOptionPane.showInputDialog(null, "Informe o código do cliente: ") );
		String nome = JOptionPane.showInputDialog(null, "Informe o nome do cliente: ");
		
		ma.inserirDados( id, nome );
		ma.mostrarDados();
		
	}	
}
javax.swing.Daniel

Já ia me esquecendo da classe Cliente:

public class Cliente
{
	private int id;
	private String nome;
	
	public Cliente()
	{
		this(0, "");
	}
	
	public Cliente(int id, String nome)
	{
		setId( id );
		setNome( nome );
	}
	
	public int getId()
	{
		return id;
	}
	
	public void setId(int i)
	{
		id = i;
	}
	
	public String getNome()
	{
		return nome;
	}
	
	public void setNome(String n)
	{
		nome = n;
	}	
}
javax.swing.Daniel

Aqui vai o arquivo com tudo que você precisa para funcionar.

ZeTripe

[size=18]Muito obrigado msm! peguei o seu código para ver como ele funciona certinho, para que eu possa intender como funciono, obrigado msm [/size]

Criado 9 de julho de 2012
Ultima resposta 10 de jul. de 2012
Respostas 4
Participantes 2