[RESOLVIDO] Ajuda para criar aplicação que lê e escreve arquivos CSV

Sim

Experimente, temporariamente, colocar o caminho completo ao arquivo.

Veja eu subi os arquivos mais um nível e agora ele está me dando um erro diferente:

Entendi.
A sua Classe Chamados tem que estar assim:

public class Chamados {

private String chamadoID;
private String Descricao;
private String DataAbertura;
private String Custo;

public Chamados() {
}

public Chamados(String chamadoID, String Descricao, String DataAbertura, String Custo) {
    this.chamadoID = chamadoID;
    this.Descricao = Descricao;
    this.DataAbertura = DataAbertura;
    this.Custo = Custo;
}

public String getChamadoID() {
    return chamadoID;
}

public void setChamadoID(String chamadoID) {
    this.chamadoID = chamadoID;
}

public String getDescricao() {
    return Descricao;
}

public void setDescricao(String Descricao) {
    this.Descricao = Descricao;
}

public String getDataAbertura() {
    return DataAbertura;
}

public void setDataAbertura(String DataAbertura) {
    this.DataAbertura = DataAbertura;
}

public String getCusto() {
    return Custo;
}

public void setCusto(String Custo) {
    this.Custo = Custo;
}

Sem erros até então, acredito que esteja lendo porem não está exibindo ainda .

Agora sim.
Deveria trazer para a tela o resultado o método mostraChamados. Dá uma conferida nos parâmetros.

Depois, vai precisar partir para a Classe ConsultaLancamentos onde irá fazer a mesma coisa que fez para a Classe Chamados e trazer os métodos para o case 1, após os métodos da ConsultaChamados.

1 curtida

Oi, neste ponto está errado. Deveria estar assim:

while ((linha = arquivo.readLine()) != null) {
        String[] dados = linha.split(separador);
         if (dados.length > 0) {
              Chamados chamados = new Chamados();
              ...
1 curtida

Perfeito,

try
{

    	scan = new BufferedReader(new FileReader(chamadosCSV));

    	while((linha = scan.readLine()) != null)
    		
    	{
    		String[] dados = linha.split(delimitador);
    		
    	    if (dados.length > 0)
    	    {
    	        Chamados chamados = new Chamados();
    	        chamados.setChamadoID(dados[0]);
    	        chamados.setDescricao(dados[1]);
    	        chamados.setDataAbertura(dados[2]);
    	        chamados.setCusto(dados[3]);
    	        listaChamados.add(chamados);
    	    }

retorno

Partindo pra cima dos lancamentos

Segue a minha classe de lista de lancamentos

package modelo;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import entidade.Lancamentos;

public class ConsultaLancamentos {

public List lerLancamentosCSV(String chamadoID, String lancamentosCSV)

{

    boolean ResultadoEncontrado = false;
    List<Lancamentos> listaLancamentos = new ArrayList<>();
    
    String linha = "";
    String delimitador = ";";
    BufferedReader scan = null;
    
    	try
    	{
  	  
    	scan = new BufferedReader(new FileReader(lancamentosCSV));

    	while((linha = scan.readLine()) != null)
    		
    	{
    		String[] dados = linha.split(delimitador);
    		
    	    if (dados.length > 0)
    	    {
    	        Lancamentos lancamentos = new Lancamentos();
    	        lancamentos.setChamadoID(dados[0]);
    	        lancamentos.setDataLancamento(dados[1]);
    	        lancamentos.setStatusID(dados[2]);
    	        listaLancamentos.add(lancamentos);
    	    }
    	}
    	
  	} 	
    	catch(Exception E)
  	{
    		System.out.println("ERRO: " + E.getMessage());
  	}
    	
    	return listaLancamentos;
}

public void mostraLancamentos(String chamadoID, List listaLancamentos)
{
for (int i = 0; i < listaLancamentos.size(); i++)
{
Lancamentos lancamentos = (Lancamentos) listaLancamentos.get(i);

        if (lancamentos.getChamadoID().equals(chamadoID))
        {
            System.out.println
            (
            "\n" + "ID: " + lancamentos.getChamadoID() +
            "\n" + "Data de lançamento do chamado: " + lancamentos.getDataLancamento() +
            "\n" + "Status do chamado: " + lancamentos.getStatusID()
            );
        }
    }
}

}

Os getters e os setters:

package entidade;

public class Lancamentos {

private String chamadoID;
private String DataLancamento;
private String StatusID;

public Lancamentos() {
}

public Lancamentos(String chamadoID, String DataLancamento, String StatusID) {

this.chamadoID = chamadoID;
this.DataLancamento = DataLancamento;
this.StatusID = StatusID;

}

public String getChamadoID() {
return chamadoID;
}

public void setChamadoID(String chamadoID) {
this.chamadoID = chamadoID;
}

public String getDataLancamento() {
return DataLancamento;
}

public void setDataLancamento(String DataLancamento) {
this.DataLancamento = DataLancamento;
}

public String getStatusID() {
return StatusID;
}

public void setStatusID(String StatusID) {
this.StatusID = StatusID;
}

}

e o menu

package visao;

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

import entidade.Chamados;
import entidade.Lancamentos;
import modelo.ConsultaChamados;
import modelo.ConsultaLancamentos;

public class Menu {

public static void main(String[] args) {

  ConsultaChamados consultaChamados = new ConsultaChamados();
  ConsultaLancamentos consultaLancamentos = new ConsultaLancamentos();
  
  String chamadosCSV = "Chamados.csv";
  String lancamentosCSV = "Lançamentos.csv";
  
  Scanner scan = new Scanner(System.in);
  
  System.out.println("------------------------------------------------");
  System.out.println("  Bemvindo ao sistema de consulta de chamados   ");
  System.out.println("------------------------------------------------\n");
  System.out.println("Selecione uma opção para continuar: \n");
  System.out.println("Digite 1 para consultar ");
  System.out.println("Digite 2 para salvar ");
  System.out.println("Digite 3 para carregar ");
  System.out.println("Digite 4 para sair \n");
  
  int opcao = scan.nextInt();
  boolean opcaoValida = true;
  
  	while(opcao == 0 || opcao > 4) {
  		System.out.println("Digite uma opção válida ! \n");
  		opcao = scan.nextInt();		

  	}	

  if(opcao > 0 || opcao <= 4) {	
  	
  		switch(opcao){
  			
  		//Caso 1  - Chama função que recupera os dados do arquivo CSV
  		case 1:
  		{	  
  			//Pede ao usuário para informar o ID do chamado
  			System.out.println("Por favor, informe o ID do chamado: ");
  			
  			//A variavel aqui chama scan2 pois já existe outra variável com o nome scan
  			Scanner scan2 = new Scanner(System.in);	
  			
  			//Pegamos o ID em forma de INT e transformamos em String
  			String chamadoID = Integer.toString(scan2.nextInt());	
  			
  			//Criamos nosso ArrayList
  			List<Chamados> listaChamados = new ArrayList<>();
  			List<Lancamentos> listaLancamentos = new ArrayList<>();
  			
  			//Recebemos o resultado da classe e o armazenamos na ArrayList
  			
  			//Lista e exibe Chamados
  			listaChamados = consultaChamados.lerChamadosCSV(chamadoID, chamadosCSV);
  			consultaChamados.mostraChamados(chamadoID, listaChamados);
  			
  			//Lista e exibe Lancamentos
  			listaLancamentos = consultaLancamentos.lerLancamentosCSV(chamadoID, lancamentosCSV);
  			consultaLancamentos.mostraLancamentos(chamadoID, listaChamados);
  			
  			break;
  		}
  			
  		case 2:{
  			System.out.println("Opcao 2 selecionada");
  			break;
  		}
  			
  		case 3:{
  			System.out.println("Opcao 3 selecionada");
  			break;
  		}
  		
  		case 4:{
  			System.out.println("Obrigado por utilizar minha aplicação, saindo... \n");
  			opcaoValida = false;
  		}
  		
  		default:{
  			System.out.println("Erro desconhecido \n");
  			opcaoValida = false;
  		}
  		
  	}
  }

}
}

Ao rodar eu recebo um erro

Não entendo, qual o problema com este cast?

O problema está na linha 59 da ConsultaLancamentos.

Sim, ele me diz que é um problema com o cast type mas , eu não entendi aonde

        Lancamentos lancamentos = (Lancamentos) listaLancamentos.get(i);

Eu poderia tirar o cast e ele entenderia que é do tipo lancamentos ?

lancamentos = listaLancamentos.get(i);

Esta é a linha 59?

Desculpe arrumei, o problema era no menu, ao invez de listaLancamentos eu coloquei Chamados

consultaLancamentos.mostraLancamentos(chamadoID, listaChamados);

Segue o retorno do console:

Bom, agora é que vem o pulo do gato, preciso filtrar este status do chamado e carregar o Status.csv

OK.
O pulo do gato é que a Classe Status você não utiliza no menu mas na Classe ConsultaLancamentos.
Faz do mesmo jeito que para as outras classes Consulta, mas ao invés de chamar o método mostraStatus no menu vc chama-o no mostraLancamentos após o System.out.println.
Entendeu? Faz aí e me avisa.

1 curtida

Me surgiu uma dúvida, no caso creio que não vá precisar passar como paramêtro a este metodo o chamadoID, eu preciso do ID que esta no arquivo lancamento, então no caso eu poderia tira-lo da li e substitui-lo por statusID ? E ai eu preencheria com o dado que vem do arquivo Lancamento.csv

image

Isto mesmo.

Então a classe ficou assim:

package modelo;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import entidade.Lancamentos;
import entidade.StatusID;

public class ConsultaStatus

{

public List lerStatusCSV(String StatusID, String StatusCSV)

{

    boolean ResultadoEncontrado = false;
    List<StatusID> listaStatusID = new ArrayList<>();
    
    String linha = "";
    String delimitador = ";";
    BufferedReader scan = null;
    
    	try
    	{
  	  
    	scan = new BufferedReader(new FileReader(StatusCSV));

    	while((linha = scan.readLine()) != null)
    		
    	{
    		String[] dados = linha.split(delimitador);
    		
    	    if (dados.length > 0)
    	    {
    	        StatusID statusID = new StatusID();
    	        statusID.setStatusID(dados[0]);
    	        statusID.setDescricao(dados[1]);
    	        listaStatusID.add(statusID);
    	    }
    	}
    	
  	} 	
    	catch(Exception E)
  	{
    		System.out.println("ERRO: " + E.getMessage());
  	}
    	
    	return listaStatusID;
}

public void mostraStatus(String statusID, List listaStatus)
{
for (int i = 0; i < listaStatus.size(); i++)
{
StatusID status = (StatusID) listaStatus.get(i);

        if (status.getStatusID().equals(statusID))
        {
            System.out.println
            (
            "\n" + "Status do chamado: " + status.getDescricao()
            );
        }
    }
}

}

E os getters e setters:

package entidade;

public class StatusID
{
private String statusID;
private String descricao;

public StatusID(){
this.statusID = statusID;
this.descricao = descricao;
}

public void setStatusID(String statusID) {
this.statusID = statusID;
}

public void setDescricao(String descricao) {
this.descricao = descricao;
}

public Object getStatusID() {
return statusID;
}

public String getDescricao() {
return descricao;
}

}

e na ConsultaLancamentos eu to chamando ela

package modelo;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import entidade.Lancamentos;

public class ConsultaLancamentos

{

public List lerLancamentosCSV(String chamadoID, String lancamentosCSV)

{

    boolean ResultadoEncontrado = false;
    List<Lancamentos> listaLancamentos = new ArrayList<>();
    
    String linha = "";
    String delimitador = ";";
    BufferedReader scan = null;
    
    	try
    	{
  	  
    	scan = new BufferedReader(new FileReader(lancamentosCSV));

    	while((linha = scan.readLine()) != null)
    		
    	{
    		String[] dados = linha.split(delimitador);
    		
    	    if (dados.length > 0)
    	    {
    	        Lancamentos lancamentos = new Lancamentos();
    	        lancamentos.setChamadoID(dados[0]);
    	        lancamentos.setDataLancamento(dados[1]);
    	        lancamentos.setStatusID(dados[2]);
    	        listaLancamentos.add(lancamentos);
    	    }
    	}
    	
  	} 	
    	catch(Exception E)
  	{
    		System.out.println("ERRO: " + E.getMessage());
  	}
    	
    	return listaLancamentos;
}

public void mostraLancamentos(String chamadoID, List listaLancamentos)
{
for (int i = 0; i < listaLancamentos.size(); i++)
{
Lancamentos lancamentos = (Lancamentos) listaLancamentos.get(i);

        if (lancamentos.getChamadoID().equals(chamadoID))
        {
            System.out.println
            (
            "\n" + "ID: " + lancamentos.getChamadoID() +
            "\n" + "Data de lançamento do chamado: " + lancamentos.getDataLancamento() +
            "\n" + "Status do chamado: " + lancamentos.getStatusID()
            );
            
            String StatusID = lancamentos.getStatusID();
            String StatusCSV = "Status.csv";
            ConsultaStatus consultaStatus = new ConsultaStatus();
            consultaStatus.lerStatusCSV(StatusID, StatusCSV);
        }
    }
}

}

Rodei o código aqui mas não me trouxe as descricoes do chamado

Neste ponto faz assim:

String StatusCSV = "Status.csv"; // este aqui pode fixar na própria Classe ConsultaStatus

ConsultaStatus consultaStatus = new ConsultaStatus();

Faltou instanciar a List e chamar o método de consultaStatus
Depois este:

consultaStatus.lerStatusCSV(lancamentos.getStatusID(), listaStatus);

Ele me mostra este erro

Sim. Está faltando o List.
Olha como fez no menu que vai ver que está faltando obter a lista.