Gravação e Leitura de Arquivo em TXT

Representação da Interface

Um exemplo de leitura e escrita de arquivo utilizando um conceito denominado generics e utilizando também o conceito de interface. O Generics é usado para criar uma classe genérica com o objetivo de passar um parâmetro que representa a classe que irá herda a classe genérica. A classe genérica tem a seguinte configuração e o paramento T entre "< >" representa a subclasse.

package control;

import java.util.List;

public interface IArquivo {
	
	public void openWrite() throws Exception;	
	public void closeWrite() throws Exception;
	public void write(T obj) throws Exception;

	public void openRead() throws Exception;	
	public void closeRead() throws Exception;
	public List read() throws Exception;
	
}
        

A Classe de entidade Pessoa

package entity;

public class Pessoa {
	
	private Integer idPessoa;	
	private String nome;	
	private String email;
	
	public Pessoa() {
		// TODO Auto-generated constructor stub
	}

	public Pessoa(Integer idPessoa, String nome, String email) {
		super();
		this.idPessoa = idPessoa;
		this.nome = nome;
		this.email = email;
	}

	@Override
	public String toString() {
		// Modifica o toString para o separador de campo ser ";"
		// E assim dividir no array.
		return  idPessoa + ";" + nome + ";" + email;
	}

	public Integer getIdPessoa() {
		return idPessoa;
	}
	public void setIdPessoa(Integer idPessoa) {
		this.idPessoa = idPessoa;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
}   
    

Classe que representa tanto a leitura e escrita de um arquivo utilizando a Classe Pessoa.

package control;

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

import entity.Pessoa;

public class Arquivo implements IArquivo {

	FileWriter fw;
	FileReader fr;
	BufferedReader br;
		
	@Override
	public void openWrite() throws Exception {
		//Nome do diretorio escolhido
		File f = new File("c:/temp");
		// Cria o diretorio, caso não exista
		f.mkdir();
		//Nome do arquivo
		File arquivo = new File(f, "pessoa.txt");
		//Aponta para o nome do arquivo
		fw = new FileWriter(arquivo, true);
	}

	@Override
	public void closeWrite() throws Exception {
		fw.close(); // Fechar o arquivo
	}

	@Override
	public void write(Pessoa p) throws Exception {
		//Escreve no arquivo
		fw.write(p.toString() + "\n" );
		//Atualiza o arquivo
		fw.flush();
	}

	@Override
	public void openRead() throws Exception {
		//Aponta para o arquivo a ser lido
		fr = new FileReader("c:/temp/pessoa.txt");
		//Colocar os dados no buffer 
		br = new BufferedReader(fr);
	}

	@Override
	public void closeRead() throws Exception {
		br.close(); // fechar o buffer
		fr.close(); // fechar o arquivo
	}

	@Override
	public List read() throws Exception {
		
		// Representa cada linha do arquivo
		String linha = null; 
		List lista = new ArrayList();		
		
		while((linha = br.readLine()) != null){
			//Separando os campos por virgula e colocando
			//em uma posição do array, começando da posição 0
			String token[] = linha.split(";");
			
			Pessoa p = new Pessoa();
			//Adiciona cada posição do vetor 
			// em seu respectivo atributo da classe Pessoa
			p.setIdPessoa(new Integer(token[0]));
			p.setNome(token[1]);
			p.setEmail(token[2]);
			//Adicionar o objeto de pessoa na lista
			lista.add(p);
		}	
		return lista;
	}	
}

Executando...

package main;

import control.Arquivo;
import entity.Pessoa;

public class Main {

	public static void main(String[] args) {
		
		Pessoa p1 = new Pessoa(1, "luiz", "luiz@gmail.com");
		Pessoa p2 = new Pessoa(2, "jose", "jose@gmail.com");
		
		Arquivo a = new Arquivo();
		
		try {
			
			//Abre o Arquivo para Escrita
			a.openWrite();
			
			//Gravar os objetos p1 e p2
			a.write(p1);
			a.write(p2);
			
			//Fechar o Arquivo para Escrita
			a.closeWrite();
			
			System.out.println("Dados Gravados");
			
			//Abre o Arquivo para Leitura
			a.openRead();
			
			//Leitura de cada linha do Arquivo
			for(Pessoa p : a.read()){
				System.out.println("Dados de Pessoa: " + p );
			}
			//Fechar o Arquivo para Leitura
			a.closeRead();
			
		} catch (Exception e) {
			System.out.println("Error: " + e.getMessage());
		}		
	}
}