Boa noite, estou com uma tarefa de programação a ser feita para a faculdade, e cheguei em um impasse. O problema é em um método de consultar um cliente,normalmente em uma string, eu conseguiria usar o IndexOf(); Como no exemplo a seguir:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class Ex03ArquivosTexto {
public static void main(String[] args) {
Scanner myObj = new Scanner(System.in);
String arq = myObj.nextLine();//Arquivo que eu quero
String palavra = myObj.nextLine();//Nome que eu quero buscar
try (BufferedReader br = new BufferedReader(new FileReader(arq))) {
String linha;
while ((linha = br.readLine()) != null) {
if (linha.indexOf(palavra) != -1) { //Método indexOf(); que comentei sobre <-------
System.out.println(linha);
}
}
} catch (IOException e) {
System.out.println("Erro: " + e.getMessage());
}
}
}
Contudo, como em meu código para esta tarefa eu estou trabalhando com OBJETOS e ARQUIVOS DE TEXTO, eu não sei como pegar as informações da mesma maneira, o intuito desse método de Consultar Cliente seria ao digitar o nome qualquer(Pablo, Pedro,Lucas,etc…) o sistema me devolvesse todos os clientes cadastrados que tivessem o nome em questão(Com todas as informações incluídas, cpf, telefone, etc…)
Como dito no programa acima, é mais tranquilo fazer com strings,eu acho o nome e dou um print em todas as linhas que o contém, porém não sei como fazê-lo com objetos.
Segue o código do sistema de controle de vendas:
import java.io.EOFException;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;
//Atributos do cliente para o controle de vendas
public class ContVendas implements Serializable{
private String cpf;
private String telefone;
private String nome;
//Tabela de seleção(Nova conta, Listagem,etc...)
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int select = 0;
do {
System.out.println(" Cadastro de cliente |1|");
System.out.println(" Listagem de clientes |2|");
System.out.println(" Consultar cliente |3|");
System.out.println(" Cadastro de compra |4|");
System.out.println(" Listagem de compra por data |5|");
System.out.println(" Listagem de compra por cliente |6|");
System.out.println(" Sair |0|");
System.out.print("Opcão: ");
select = in.nextInt();
switch (select) {
case 1:
novoCliente();
break;
case 2:
listarContas();
break;
case 3:
consultaClientes();
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 0:
break;
default:
System.out.println("Opcão inválida!");
}
}while (select !=0);
in.close();
}
//Método de cadastro de novo cliente
private static void novoCliente() {
ContVendas c = new ContVendas();
try {
Scanner in = new Scanner(System.in);
System.out.print("Nome: ");
c.nome = in.nextLine();
System.out.print("CPF: ");
c.cpf = in.nextLine();
while (numeroCadastrado(c.cpf) != null) {
System.out.println("Já existe uma conta com esse CPF.");
System.out.println("Digite novamente.");
System.out.print("CPF: ");
c.cpf = in.nextLine();
}
System.out.print("Telefone");
c.telefone = in.nextLine();
Path path = Paths.get("clientes.dat");
if (Files.exists(path)) {
try (FileOutputStream fos = new FileOutputStream("clientes.dat", true);
AppendingObjectOutputStream output = new AppendingObjectOutputStream(fos)) {
output.writeObject(c);
} catch (FileNotFoundException e) {
System.out.println("Nao foi possível abrir o arquivo.");
} catch (IOException e) {
System.out.println("Erro de escrita no arquivo.");
}
} else {
try (ObjectOutputStream output = new ObjectOutputStream(Files.newOutputStream(path))) {
output.writeObject(c);
} catch (IOException e) {
System.out.println("Erro de escrita no arquivo.");
}
}
}
catch (InvalidPathException e) {
System.out.println("Nao foi possivel encontrar o arquivo.");
}
finally {
}
}
//Método de listagem das contas
private static void listarContas() {
try (ObjectInputStream input = new ObjectInputStream(Files.newInputStream(Paths.get("clientes.dat")))) {
while (true) {
ContVendas c = (ContVendas) input.readObject();
System.out.printf( c.nome +"|"+ c.cpf+ "|" + c.telefone + "\n");
}
} catch (EOFException e) {
System.out.println("Fim dos registros");
} catch (ClassNotFoundException e) {
System.out.println("Tipo de objeto invalido!");
} catch (IOException e) {
System.out.println("Erro de leitura no arquivo");
}
}
//Método de consulta de clientes
private static void consultaClientes() {
Scanner myObj = new Scanner(System.in);
String palavra = myObj.nextLine();
try (ObjectInputStream input = new ObjectInputStream(Files.newInputStream(Paths.get("clientes.dat")))) {
String linha = null;
while (true) {
if (linha.indexOf(palavra) != -1) {
ContVendas c = (ContVendas) input.readObject();
System.out.printf( c.nome +"|"+ c.cpf+ "|" + c.telefone + "\n");
}
}
} catch (EOFException e) {
System.out.println("Fim dos registros");
} catch (ClassNotFoundException e) {
System.out.println("Tipo de objeto invalido!");
} catch (IOException e) {
System.out.println("Erro de leitura no arquivo");
}
}
//Verificação se o CPF já existe
private static ContVendas numeroCadastrado(String cpf) {
try (ObjectInputStream input = new ObjectInputStream(Files.newInputStream(Paths.get("clientes.dat")))) {
while (true) {
ContVendas c = (ContVendas) input.readObject();
if ((c.cpf).equalsIgnoreCase(cpf)==true) {
return c;
}
}
}catch (EOFException e) {
} catch (ClassNotFoundException e) {
System.out.println("Tipo de objeto invalido!");
}
//Caso o arquivo ainda não exista, o programa o cria e continua normalmente.
catch(NoSuchFileException e) {
}
catch (IOException e) {
System.out.println("Erro de leitura no arquivo");
System.out.println(e);
}
return null;
}
}