GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Comparando valores antes de escrever

java
banco
Tags: #<Tag:0x00007fbf1fbccb50> #<Tag:0x00007fbf1fbcca10>

#1

Boa tarde pessoal.

Sou novo em java e tenho um projeto onde simulo certas operações de banco como por exemplo o cadastro de clientes dentro de um arquivo .csv, o problema é que para fazer este cadastro preciso fazer uma comparação do código do cliente com os códigos do arquivo que contém os nomes dos clientes já cadastrados ou seja o método não pode permitir que aconteça o cadastro de clientes com o código repetido é exatamente este o problema que estou tendo dentro do método.

Blockquote
private static void cadastraConta() {
System.out.println(“Digite os dados da conta:”);
System.out.println("Código: ");
String codigoConta = scan.nextLine();
codigoConta = scan.nextLine();
System.out.println("codigo do cliente: ");
String codigoCliente = scan.nextLine();
System.out.println("Data de criação: ");
String dataCadastro = scan.nextLine();

A leitura é feita feita dentro destas variáveis.

Blockquote
try {
FileReader leitorContaComparacao = new FileReader(“conta.csv”);
BufferedReader leitorContaCompara = new BufferedReader(leitorContaComparacao);
String linhaContaCompara = leitorContaCompara.readLine();
String[] vetorContaComparacao;
boolean verificarConta = false;

Ai tem a leitura do arquivo .csv que o método precisa ler criei uma variável booleana para fazer a validação dentro do loop de leitura.

Blockquote
while (linhaContaCompara != null) {
vetorContaComparacao = linhaContaCompara.split(";");
if (vetorContaComparacao[0].equals(codigoConta)) {
} else {
verificarConta = true;
}
linhaContaCompara = leitorContaCompara.readLine();
}

A leitura de todo arquivo é feita aqui e ai tem a variável que válida a leitura fazendo que o conteúdo seja escrito dentro do arquivo .csv

Blockquote
if(verificarConta == true) {
linhaContaCompara = leitorContaCompara.readLine();
FileWriter escreverConta = new FileWriter(“conta.csv”, true);
BufferedWriter escreveArquivoConta = new BufferedWriter(escreverConta);
escreveArquivoConta.write(codigoConta + “;” + codigoCliente + “;” + dataCadastro);
escreveArquivoConta.newLine();
escreveArquivoConta.close();
escreverConta.close();
System.out.println(“Cadastro feito com sucesso!”);
} else {
System.out.println(“Codigo da conta já existe!”);
}

E aqui é a escrita no arquivo.

O problema é que ele faz a leitura e se o código estiver repetido dentro do arquivo ele ainda continua fazendo a leitura e escrevendo dentro do código.

Qual o erro que cometi e o que devo fazer para corrigi-lo?


#2

O problema deve ser a leitura, quando encontra a conta, sai do loop while. Troquei o verificarConta por encontrouConta para ficar mais fácil de entender

boolean encontrouConta = false;
String linhaContaCompara = leitorContaCompara.readLine();
while (linhaContaCompara != null) {
 vetorContaComparacao = linhaContaCompara.split(";");
 if (vetorContaComparacao[0].equals(codigoConta)) {
  encontrouConta = true;
  break; // encontrou conta, então sai do while
 } else {
  linhaContaCompara = leitorContaCompara.readLine(); // lê o próximo
 }
}

e na comparação

if (!encontrouConta) { // se não encontrou a conta

#3

Sim! o problema era na leitura e na comparação que eu usei fui bem burro na hora kkk

Mas enfim consegui resolver o problema (-:

Muito obrigado amigo