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

Ah sim é verdade,

            String StatusID = lancamentos.getStatusID();
            List<StatusID> listaStatusID = new ArrayList<>();
            ConsultaStatus consultaStatus = new ConsultaStatus();
            consultaStatus.listaStatus(lancamentos.getStatusID(), listaStatusID);

Agora esta ok , mas ele ainda não ta me printando a coluna descricao

Falta a listaStatusID que é o retorno do método lerStatus.

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

{
String StatusCSV = “Status.csv”;

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 listaStatus(String statusID, List listaStatusID)
{
for (int i = 0; i < listaStatusID.size(); i++)
{
StatusID status = (StatusID) listaStatusID.get(i);

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

}

mas eu estou chamando o listaStatus

Assim:
String StatusID = lancamentos.getStatusID();
List listaStatusID = new ArrayList<>();
ConsultaStatus consultaStatus = new ConsultaStatus();
listaStatusID = consultaStatus.lerStatus();
consultaStatus.listaStatus(lancamentos.getStatusID(), listaStatusID);

Desculpa a distração, agora deu certo, ajeitei a saída para igual do exercício também, veja só:

Ficou perfeito

1 curtida

Indo para o passo 2, agora vou repetir o código no case 1 e depois dar a opção de renomear o arquivo e salva-lo, eu tenho uma dúvida, para chamar o menu novamente, como ele também é uma classe de view, eu posso invoca-lo normalmente após o código para isso acontecer certo?

Pode. O certo era colocar o menu num laço. Mas pode fazer depois.

1 curtida

Agora no case 2 do switch do menu, repito a ação anterior e solicito um nome para o arquivo que será salvo:

case 2:{
//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 listaChamados = new ArrayList<>();
List 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, listaLancamentos);

/////////////////////////////////////////////////////////////////////////////////

//Pede ao usuário para informar o nome do arquivo que será salvo
System.out.println("Por favor, informe o nome do arquivo a ser salvo: ");

//A variavel aqui chama scan3 pois já existe outra variável com o nome scan2
Scanner scan3 = new Scanner(System.in);

//Pegamos o nome do arquivo em forma String
String NomedoArquivo = scan3.nextLine();

Pronto agora basta salvar este arquivo gerado em um novo arquivo com o nome que o usuario escolheu

Não precisa instanciar novamente o Scanner.
Para salvar precisa dos dados serializados encaminhando para um arquivo.

1 curtida

Como eu quero entao salvar em um novo arquivo a busca que o usuario fez eu crio um retorno de todos os dados que eu exibi e escrevo num novo arquivo certo?

Mas se eu não instanciar um novo scan ele vai guardar o valor no scan anterior tb e ai quando eu chama o menu vai da xabu

É por aí.

Na verdade o Scanner vai reiniciar quando chamar o menu. Tem que ver como vai tratar o laço depois.

Talvez colocar o cabeçalho e as opções dentro de metodos e chama-los, eu queria agora retornar todos os dados que foram printados pro usuario e recebe-los nessa classe auqi

import java.io.FileOutputStream;
import java.io.PrintWriter;

public class SalvaConsulta {

public void EscreveNoArquivoCSV() {
	
	FileOutputStream arquivoCSV = new FileOutputStream("Nome do CSV que o usuario escolheu", true);
	PrintWriter salvaArquivo = new PrintWriter(arquivoCSV);
	
	salvaArquivo.println("Nome do arquivo no qual vou escrever");
	
}

}

Porque ai no caso escrevendo eu posso salvar o arquivo certo?

Alias, acho que o correto é criar um novo CSV

Quando serializa trata os dados como objetos.
Veja isto:


Não sei se seu Professor(a) vai querer os dados em texto puro.
Pela descrição do case 2, aparentemente não.

Eu tenho eu retorno tudo num arrayList e por ser serializavel por padrão eu consigo passa-lo por parametro pegar na minha classe que vai salva os arquivos

Mas não será toda a lista, somente o registro informado pelo usuário.
Monte o método todo. Vamos ver o que consegue.
Uma dica para lhe ajudar: nas classes do pacote entidade crie um método chamado toString.

package visao;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class SalvaConsulta {

public void EscreveNoArquivoCSV(String NomeDoArquivo, List ListaConsulta) {

  ArrayList<String> listaConsulta = new ArrayList();
  			
   try{
  	 FileOutputStream arquivoCSV = new FileOutputStream(NomeDoArquivo);
       ObjectOutputStream saidaDoArquivo = new ObjectOutputStream(arquivoCSV);
       
       saidaDoArquivo.writeObject(listaConsulta);
       saidaDoArquivo.close();
       arquivoCSV.close();
     }catch(IOException ioe){
          ioe.printStackTrace();
      }

}
}

Assim eu recebo o resultado em forma de lista certo e escrevo no arquivo e salvo ele, agora eu preciso serializar os dados que retornaram ao usuario e com essa classe eu des-serializo certo?

Esta List listaConsulta vem da listaChamados e listaLancamentos?
Se sim, vai sobrepor o conteúdo se acionada duas vezes ou mais.