Gravar ArrayList em arquivo .txt

8 respostas
mauraoemau

Olá pessoal estou tentando gravar um ArrayList em um arquivo .txt

Classe principal

//Objeto
    Cadastro inserir = new Cadastro();
        
    //ArrayList
    ArrayList<Cadastro> cadastro = new ArrayList<Cadastro>();
    
    //Objeto para escrever
    Cria abrir = new Cria();
    
    public void MenuCadastro(){ 
        
        //Atributos
        int op = 0;
        
        //Do...While
        do{
            System.out.println("1 - Incluir");
            System.out.println("2 - Mostrar");
            System.out.println("3 - Voltar");
            System.out.println("Entre com a opção");
            op = entra.nextInt();
            
            //Switch
            switch(op){
                case 1: 
                    inserir = new Cadastro();
                    inserir.Entrada();
                    cadastro.add(inserir);
                    abrir.Teste(cadastro);
                    break;
                    
                case 2:
                    for(int i=0; i < cadastro.size(); i++){
                        cadastro.get(i).Mostra();
                    }
                    break;
                    
                default:
                    System.out.println("Nenhuma opção escolhida");
                    break;
            }
        }while(op != 3);
    }

Classe para criar o arquivo txt e inseir.

public class Cria {

    public void Teste()throws IOException{
        
        
        //Cria o arquivo
        FileOutputStream cria = new FileOutputStream("palavra.txt");
        //Cria o objeto para arquivo
	ObjectOutputStream esc = new ObjectOutputStream(cria);

        //Fecha o objeto
	esc.close();
    }
}

8 Respostas

Jair_Rillo_Junior

OK, mas qual o problema?

mauraoemau
Bom deixa eu explicar, o erro esta na hora de criar o arquivo ele cai direto para Catch
case 1: 
                    inserir = new Cadastro();
                    inserir.Entrada();
                    cadastro.add(inserir);
                    Cria abrir = new Cria();
                    try{
                    abrir.Teste(cadastro);
                    }
                    catch ( IOException ioException )
                    {
                        System.out.println( "Erro de abertura de arquivo." );
                    }
                    break;
Classe Cria
public class Cria {

    
    public void Teste(List cadastro)throws IOException{

        //Cria o arquivo
        FileOutputStream cria = new FileOutputStream("palavra.txt");
        //Cria o objeto para arquivo
	ObjectOutputStream esc = new ObjectOutputStream(cria);

        esc.writeObject(cadastro);
        //Fecha o objeto
	esc.close();
    }
        
}

Na hora de criar o arquivo da erro... cai no catch..

Allan_Barcelos

cara tenta usar isso na classe em que esta programando, sem criar outra classe, cria só um método na sua classe principal a que necessita salvar o arquivo:

public void gravaTxt(){

		File file = new File("Lista.txt");
		String nome = ""; // só um exemplo, crie todoas as variaveis que são atributos dos objetos do array list
		String conteudo;
 try	{
	        FileWriter f = new FileWriter (file, true);
	 
	        for(int i = 0; i < seuArrayList; i++){
	        	
	        	nome = seuArrayList.get(i); // chama o atributo do objeto na posição i
                                conteudo = nome;
	        	conteudo += "\r\n";
	        	f.write(conteudo);
	        	
	        }
	        
	        f.close();

	    }catch (IOException e)  {
	            e.printStackTrace();
	    }catch (UnderflowException e) {
			e.printStackTrace();  
		}
	}
Jair_Rillo_Junior

Bom, tem que analisar o LOG da exception para ter noção o que aconteceu.

Passa o stacktrace que fica mais fácil para te ajudar

Marky.Vasconcelos

Talvez o problema é o arquivo não existir.

Posta o StackTrace.

Mas acredito que apenas criar o arquivo antes resolva. E voce pode fazer isso via Java.

File f = new File("palavra.txt");
f.createNewFile();
FileInputStream fis = new FileInputStream(f);
//Continua trabalhando com fis
V

Passa a Stacktrace, mas antes verifica se o caminho do arquivo estar correto :wink:

mauraoemau

Desculpa, galera por encher o saco novamente...
Conseguir criar o arquivo de outro jeito menos mau só que agora não estou conseguindo exibir o conteúdo.

public static void Exibe(){
        String nomedoarquivo = "texto.txt";
        List cadastro = null;
        FileInputStream fis = null;
        ObjectInputStream in = null;
        Contato contato = new Contato();
        
        try{
            fis = new FileInputStream(nomedoarquivo);
            in = new ObjectInputStream(fis);
            cadastro = (ArrayList) in.readObject();
        }
        catch (IOException ex){
            ex.printStackTrace();
	} 
        catch (ClassNotFoundException ex){
            ex.printStackTrace();
        }
        
        System.out.println("Tamanho: " + cadastro.size());
	System.out.println();
        
        for(int i=0; i<cadastro.size(); i++){
             //Exibe na tela
             String nome = null;
             System.out.println("%15s", cadastro.get(i).nome);
        }
     }

Ele fala que esta com erro na linha 26"System.out.println("%15s", cadastro.get(i).nome);"
Da erro de variable nome.

Ja tentei modificar para
cadastro.get(i).Mostra();

Que iria pegar o metodo mostra da minha classe contato.

C

Não seria:

.......
for(int i = 0; i < seuArrayList.size(); i++){ 
.....

Ao invés de

.......
for(int i = 0; i < seuArrayList; i++){ 
.....

??

Criado 5 de junho de 2010
Ultima resposta 15 de out. de 2014
Respostas 8
Participantes 6