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.
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.
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.
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
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; } } }
}
}
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.
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 !