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

Então antes eu preciso pegar o resultado transformar em uma lista e passar pra essa função ne, ai no caso seria a lista que recebe o retorno da busca que o usuário fez

Sim. Tem que colocar numa nova ArrayList com o método add o retorno de cada entidade, conforme o número do chamado indicado pelo usuário, para que possa salvar ao final no arquivo.
Utilize println com a nova ArrayList método .toString para ver na tela o que está ocorrendo. Depois se preocupa em salvar no arquivo.

Certo, agora ele está serializado, e eu posso jogar na minha classe

Isto. Mas tem que utilizar o .toString para não colocar no arquivo estes tipos de informações “entidade.Lancamentos@7d4991ad”. O certo e trazer os dados.

1 curtida

Cria este classe de teste e veja como ficam os dados no seu conteúdo.

public class ArrayListSerialization
{
   public static void main(String [] args)
   {
       ArrayList<String> al=new ArrayList<String>();
       al.add("Hello");
       al.add("Hi");
       al.add("Howdy");

       try{
         FileOutputStream fos= new FileOutputStream("myfile");
         ObjectOutputStream oos= new ObjectOutputStream(fos);
         oos.writeObject(al);
         oos.close();
         fos.close();
       }catch(IOException ioe){
            ioe.printStackTrace();
        }
   }
}

Seu arquivo tem que ficar parecido com este.
DadosSalvos.txt (274 Bytes)

				String lista = listaConsulta.toString();
				System.out.println(lista);

e ainda me devolve array

Muita calma nesta hora.
Depois que o usuário informa o número do chamado e indica o nome do arquivo para salvar.
O número é obtido pelo método mostraChamados, depois vc precisa pegar estes dados com .toString e depois colocar numa array nova para direcionar para o arquivo. Para Chamados, Lancamentos e Status.

zzzzz.add(serialChamados.toString());

Neste seu case2 está obtendo o conteúdo da lista inteira sem fazer a seleção do chamadoID informado pelo usuário.

Ah entendi esse ‘recupera’ como trazer a lista e depois da exibicao pergunta o nome do arquivo que o usuario quer salvar

ai no caso farei outro scan e dps eu recebo as listas ?

Não precisa exibir para o usuário.
Coloque num println para você ver o resultado na tela.
O case3 irá fazer a exibição completa depois.

1 curtida

Pode ser direto. Pede o número e depois o nome do arquivo.
Na sequência obtêm o registro indicado (dados do chamado, lancamentos e status) coloca num array e direciona para o arquivo.
Localizei um exemplo bem didático.
https://www.devmedia.com.br/introducao-a-serializacao-de-objetos/3050

1 curtida
  			ArrayList listaConsulta = new ArrayList<>();
  			listaConsulta.add(listaChamados);
  			listaConsulta.add(listaLancamentos);
  			
  			String lista = listaConsulta.toString();
  			System.out.println(lista);

Nesse bloco ele me retorna o valor em array e não string

No caso eu interpreto o objeto do tutorial como o meu arraylist ne pois ambos podem ser serializados e des-serializados

Tentei assim e também não resolveu, no caso eu posso mandar direto pra classe que faz a des-serialização, mesmo em forma de array?

  			ArrayList listaConsulta = new ArrayList<>();
  			listaConsulta.add(listaChamados.toString());
  			listaConsulta.add(listaLancamentos.toString());
  			
  			System.out.println(listaConsulta);

Veja como está minha classe

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 SalvaArquivo(String NomeDoArquivo, List ListaConsulta) {

  ArrayList<String> listaConsulta = new ArrayList();
  try 
  {
  		
  //Gera o arquivo para armazenar o objeto
  		 
  FileOutputStream arquivoGrav =
  	 
  new FileOutputStream(NomeDoArquivo);
  	     
  //Classe responsavel por inserir os objetos
  ObjectOutputStream objGravar = new ObjectOutputStream(arquivoGrav);
  		 
  //Grava o objeto cliente no arquivo
  		 
  objGravar.writeObject(listaConsulta);
  		 
  objGravar.flush(); 
  objGravar.close();
  		 
  arquivoGrav.flush();	 
  arquivoGrav.close();
  		 
  System.out.println("Objeto gravado com sucesso!");
  		 
  }
   
  catch(Exception e)
  {
   
  	e.printStackTrace();
   
  }

}
}

Retorno

e meu 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, listaLancamentos);
  			
  			break;
  		}
  			
  		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<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);
  			
  			//Lista e exibe Lancamentos
  			listaLancamentos = consultaLancamentos.lerLancamentosCSV(chamadoID, lancamentosCSV);
  			
  			/////////////////////////////////////////////////////////////////////////////////
  			
  			//Criamos nosso ArrayList com o resultado da busca e passamos para um novo ArrayList
  			
  			ArrayList<String> ListaConsulta = new ArrayList<String>();
  			ListaConsulta.add(listaChamados.toString());
  			ListaConsulta.add(listaLancamentos.toString());
  			
  			//System.out.println(listaConsulta);
  			
  			//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();
  			
  			//Chama a classe que salva o arquivo com o nome que o usuário escolheu
  			SalvaConsulta salvaConsulta = new SalvaConsulta();
  			salvaConsulta.SalvaArquivo(NomeDoArquivo, ListaConsulta);
  			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;
  		}
  		
  	}
  }

}
}

image

O arquivo ta vindo em array e não string

Olá!
Para serializar os dados obtidos das planilhas segue este método.
Precisa completar para obter os lançamentos.

    public void serialChamados(String chamadoID, List listaChamados, List listaLancamentos, List listaStatus, String arquivoTXT) {
            ArrayList<String> serialDados = new ArrayList<>();

            for (int i = 0; i < listaChamados.size(); i++) {
                Chamados chamados = (Chamados) listaChamados.get(i);
                if (chamados.getChamadoID().equals(chamadoID)) {
                    ArrayList<String> serialChamados = new ArrayList<>();
                    serialChamados.add(chamados.getChamadoID());
                    serialChamados.add(chamados.getDescricao());
                    serialChamados.add(chamados.getDataAbertura());
                    serialChamados.add(chamados.getCusto());
                    System.out.println("Chamados Serial: " + serialChamados.toString());
                    serialDados.add(serialChamados.toString());
                }
            }

            System.out.println("Dados Serial: " + serialDados.toString());

            try {
                FileOutputStream arquivo = new FileOutputStream(arquivoTXT);
                ObjectOutputStream saida = new ObjectOutputStream(arquivo);
                saida.writeObject(serialDados);
                saida.close();
                arquivo.close();
            } catch (FileNotFoundException ex) {
               ex.printStackTrace();
            } catch (IOException ex) {
               ex.printStackTrace();
            }
        }

Deixei alguns println’s para ver na tela o que ocorre, depois pode remover.

1 curtida

A agora sim ficou muito mais claro, eu tava passando pra array pra depois string tava uma loucura, agora está printando.

Agora farei o processo reverso para ler o arquivo e termino

Deu certo aqui, terminei só o print que ficou um pouco diferente, mas vou modifica-lo depois , muito obrigado !