14 de fev. de 2014

Como passar um ArrayList para um arquivo texto Java

Nesse tutorial bem simples, estaremos vendo como é possível salvar o conteúdo de um ArrayList para um arquivos de texto no Java e vice-versa. Para isso utiliza-se as seguintes classe:

File: Terá a função de ciar o arquivo;
BufferedWriter, FileWriter: Terão a função de escrever no arquivo.
BufferedReader: Terá a função de ler o arquivo para colocar seu conteúdo em outro Array

Para saber mais sobre leitura e escritas de arquivos, clique aqui.

Veja também:

Inicialmente deve-se criar um ArrayList, na qual se deseja salvar o conteúdo.

 ArrayList<String> contatos = new ArrayList<String>();

Após isso deve-se criar um objeto da classe File.

File arquivo = new File("tutorial.txt");     //criar o objeto file
            if (arquivo.exists() != true) {         //se o arquivo tutorial.txt não existir, ele o cria
                arquivo.createNewFile();       
            }


Agora é preciso criar um objeto da classe FileWriter e da classe BufferedWriter:

FileWriter escre = new FileWriter(arquivo);
BufferedWriter escrever = new BufferedWriter(escre);

Ao final devemos criar um loop for que irá percorrer todo o Array e salvará cada linha no arquivo.

  for (int i = 0; i < listaContatos.size(); i++) {
                escrever.write(listaContatos.get(i));
                escrever.newLine();
            }


Mas para que o arquivo seja lido e seu conteúdo coloca em outro Array, devemos fazer mais algumas coisas:

Criação do BufferedReader para ler o arquivo. 

 BufferedReader ler = new BufferedReader(new FileReader("tutorial.txt")); //ler o tutorial.txt
            for (int i = 0; i < listaContatos.size(); i++) {  //percorre todo o array
                obterListaContato.add(ler.readLine());
            }


Veja abaixo o código completo e comentado:

 public static void main(String[] args) {
        ArrayList<String> listaContatos = new ArrayList<String>();
        ArrayList<String> obterListaContato = new ArrayList<String>();
        listaContatos.add("João");
        listaContatos.add("Maria");
        listaContatos.add("Sem nome");
        try {

            File arquivo = new File("tutorial.txt");  //criação do file arquivo.txt, ficará no local do projeto
            if (arquivo.exists() != true) {  //só cria outro arquivo, se não houver um igual.
                arquivo.createNewFile();
            }

            FileWriter escre = new FileWriter(arquivo, true);
            BufferedWriter escrever = new BufferedWriter(escre);

            for (int i = 0; i < listaContatos.size(); i++) {  //percorre todo o array
                escrever.write(listaContatos.get(i));      //obtem o valor i do array e salva no arquivo com o método writer
                escrever.newLine();           //pula uma linha, assim cada posição do array é salva em uma linha
            }
            escrever.close();          // os objetos devem ser fechados para que a edição seja salva
            escre.close();

            BufferedReader ler = new BufferedReader(new FileReader("tutorial.txt"));

            for (int i = 0; i < listaContatos.size(); i++) {  //percorre todo o array
                obterListaContato.add(ler.readLine());       //adicionar cada linha ao arquivo
            }
            for (int i = 0; i < obterListaContato.size(); i++) {
                System.out.println(" = " + obterListaContato.get(i));
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

13 de fev. de 2014

Como criar ArrayList de objetos em Java

Nesse tutorial estaremos aprendendo como salvar objetos dentro de um ArrayList. Mostraremos em outro tutorial, que você pode criar algo que simula um banco de dados e salvar esses Arrays. 
Veja abaixo como criar o ArrayList, salvar os objetos e obter determinados valores:
Instanciando o objeto ArrayList:
ArrayList<Agenda> listaContatos = new ArrayList<Agenda>();

Agenda = nome da classe que terão seus objetos guardados.


Adicionando um objeto ao ArrayList:
Agenda novoContato = new Agenda();
listaContatos.add(novoContato);

Obtendo um valor:
listaContatos.get(i).getNome()
i = posição do objeto no Array;
getNome() = método da classe Agenda que retorna uma String com o nome;

Agora mostraremos um exemplo prático de uma agenda de contatos, na qual é possível adicionar, remover, pesquisar e imprimir os contatos.


  //CLASSE AGENDA
public class Agenda {
    public String nome;
    public String endereco;
    public int telefone;

    public Agenda(String nome, String endereco, int telefone) {  //CONSTRUTOR DA CLASSE
        this.nome = nome;
        this.endereco = endereco;
        this.telefone = telefone;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public int getTelefone() {
        return telefone;
    }

    public void setTelefone(int telefone) {
        this.telefone = telefone;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

//CLASSE PRINCIPAL
 public class Tela {
    public static void main(String[] args) {

        Scanner entrada = new Scanner(System.in);
        ArrayList<Agenda> listaContatos = new ArrayList<Agenda>();  //CRIAÇÃO DO ARRAY

        String a = null;
        while (a == a) {
            System.out.println("1- adicionar");
            System.out.println("2- mostrar");
            System.out.println("3- procurar");
            System.out.println("4- excluir");
            int aux = entrada.nextInt();
            switch (aux) {
                case 1:
                    Agenda novoContato = new Agenda("", "", 0);
                   
                    System.out.println("Digite o nome do contato");
                    String nome = entrada.nextLine();
                    novoContato.setNome(nome);

                    System.out.println("Digite o endereço do contato");
                    String endereco = entrada.nextLine();
                    novoContato.setEndereco(endereco);

                    System.out.println("Digite o telefone do contato");
                    int telefone = entrada.nextInt();
                    novoContato.setTelefone(telefone);

                    listaContatos.add(novoContato);


                    break;

                case 2:

                    for (int i = 0; i < listaContatos.size(); i++) {
                        System.out.println("Nome: " + listaContatos.get(i).getNome());
                        System.out.println("Telefone: " + listaContatos.get(i).getTelefone());
                        System.out.println("Endereço: " + listaContatos.get(i).getEndereco());
                        System.out.println("");
                    }

                    break;

                case 3:
                    System.out.println("Digite o nome para a procura");
                    String nomeProcura = entrada.nextLine();
                    for (int i = 0; i < listaContatos.size(); i++) {
                        if (listaContatos.get(i).getNome().equals(nomeProcura)) {
                            System.out.println("Nome: " + listaContatos.get(i).getNome());
                            System.out.println("Telefone: " + listaContatos.get(i).getTelefone());
                            System.out.println("Endereço: " + listaContatos.get(i).getEndereco());
                            System.out.println("");
                        }
                    }
                    break;
                case 4:

                    System.out.println("Digite o nome para a procura");
                    String excluir = entrada.nextLine();
                    for (int i = 0; i < listaContatos.size(); i++) {
                        if (listaContatos.get(i).getNome().equals(excluir));
                        listaContatos.remove(i);
                    }
                    break;
                default:
                    break;

            }
        }

    }

12 de fev. de 2014

Adicionar conteúdo em um arquivo Java sem apagar conteúdo existente

Muitas programadores iniciantes tem se deparado com um pequeno problema ao criar um objeto da classe FileWriter para gravar um conteúdo em um arquivo já existente. O que ocorre é que, ao adicionar um novo conteúdo, o conteúdo que já existente é apagado. Isso pode ocorrer devido ao fato de não se adicionar o parâmetro boolean append.

Esse problema pode ser resolvido facilmente, basta instanciar a classe corretamente da seguinte forma:

FileWriter fw = new FileWriter(local, boolean append);

local = diretório do arquivo ou objeto da classe File;

boolean append
true : Ao escrever no arquivo, o conteúdo existente não será substituído, assim o novo conteúdo será escrito no final.
false >
Ao escrever no arquivo, o conteúdo existente será substituído.

Veja mais:
Criação, leitura e escrita de arquivos de texto em Java

11 de fev. de 2014

Como excluir uma linha de um arquivo de texto em Java

O Java oferece diversas classes para manipulação de arquivos. Mas não encontramos algum método que tenha a função de excluir determinada linha, devido a esse fato ensinaremos, nesse tutorial, como excluir uma determinada linha que contém um texto.


Dependendo do caso em que você queira excluir uma linha, seu código terá problemas, pois se, por exemplo, você desejar excluir a linha com o nome "João", se alguma outra linha conter esse nome, ocorrerá um erro e ambas serão excluídas. A solução para isso é você criar um id para cada linha, assim se você quiser excluir a linha do cadastro "joão", excluirá pelo seu id, assim "id=01".

Primeiramente deve-se criar um ArrayList para salvar as linhas que não serão excluídas. Após isso um while deverá ser usado para procurar a linha que será excluída, enquanto a linha for lida e nela não conter o conteúdo da linha que se quer remover, ela é salva no ArrayList, ao final limpa-se o arquivo e transfere-se o arquivo do ArrayList para o arquivo.



ArrayList<String> guardarLinhas = new ArrayList<String>();

        String linha = "";
        String palavra = "linha excluida"

        try {
            BufferedReader in = new BufferedReader(new FileReader("arquivo.txt"));

            FileWriter fw = new FileWriter("dados/arquivo.dat", true);
            BufferedWriter bw = new BufferedWriter(fw);
          

         while ((linha = in.readLine()) != null) {

                if (linha.contains(
palavra)) {      //se na linha não conter a palavra, ela é salva
                } else {
                   
guardarLinhas .add(linha);
 
                }
            }
            fw.close();
            bw.close();
            in.close();
            File file = new File("arquivo.txt");  //limpa os dados do arquivo
            file.delete();

            File file2 = new File("arquivo.txt");  //cria um novo arquivo
            file2.createNewFile();
            FileWriter fw2 = new FileWriter("dados/arquivo.dat", true);
            BufferedWriter bw2 = new BufferedWriter(fw2);

            for (int i = 0; i < guardarCadastros.size(); i++) {   //transfere o ArrayList para o arquivo
                bw2.write(guardarCadastros.get(i));
                bw2.newLine();

            }
            bw2.close();
            fw2.close();

        } catch (IOException e) {
        }


 Outro Exemplo:

   public static void main(String[] args) {
    File fil = new File("arquivo.txt");
   
    try{
    FileReader fr = new FileReader(fil);
    BufferedReader br = new BufferedReader(fr);
   
  
  
    String linha = br.readLine();
    ArrayList<String> salvar = new ArrayList();
   
    while(linha != null){
       
        if(linha.equals("linha3") == false){
            salvar.add(linha);
        }
       
        linha = br.readLine();
    }
   
   
    br.close();
    fr.close();
    FileWriter fw2 = new FileWriter(fil, true);
    fw2.close();
   
   
    FileWriter fw = new FileWriter(fil);
    BufferedWriter bw = new BufferedWriter(fw);
   
    for(int i = 0; i<salvar.size(); i++){
        bw.write( salvar.get(i) );
        bw.newLine();
    }
    bw.close();
    fw.close();
   
    }catch(IOException ex){
       
    }
    }

Criação, leitura e escrita de arquivos de texto em Java

A leitura e escrita de arquivos em Java é essencial para guardarmos informações que poderão ser utilizadas em execuções de um determinado programa. O Java disponibiliza algumas classes para criação, leitura e escrita de arquivos .txt .dat etc. Além disso, podemos criar pastas e ler seu conteúdo. Abaixo indicaremos as principais classes utilizadas para manipulação de arquivos em Java.
Classe File:

Função: Permite o acesso aos arquivos do sistema operacional, ou seja, representa um arquivo ou diretório, pela qual pode-se obter informações como nome, tamanho, se é ou não um diretório, se tem permissão para escrita ou leitura etc.

Veja abaixo como utilizar os métodos básicos da classe.

Criar um objeto da classe:
File arq = new File("diretório/arquivo.txt");

Verificar se um arquivo existe:
boolean testar = arq.exists();

Criar um arquivo:
arq.createNewlFile();

Criar um diretório:
arq.mkdir();

Listar todos os arquivos de um diretório:
File [] arq = arq.listFiles();

Deletar um arquivo ou diretório:
arq.delete();


Classe FireWriter e BufferedWriter:

Função: Ambas as classes servem para escrita de arquivos.

Criar um objeto da classe FileWriter:
   
FileWriter fw = new FileWriter(local, boolean);
local = diretório do arquivo ou objeto da classe File;
boolean 
true > Ao escrever no arquivo, o conteúdo existente não será substituído, assim o novo conteúdo será escrito no final.
false >
Ao escrever no arquivo, o conteúdo existente será substituído.

Criar um objeto da classe BufferedWriter:   
BufferedWriter bw = new BufferedWriter( fw );
OBS: Deve receber como argumento um objeto FileWriter, no caso "fw".
Escrever no arquivo:
bw.write( "Testo que será escrito no arquivo txt");

Para dar uma quebra de linha utilize o método:
bw.newLine();

Após a edição do arquivo e necessário fechar os recursos, caso você não feche, o arquivo poderá não ser editado.   
bw.close();
fw.close();

Classes FileReader e BufferedReader 
Função: Ambas as classes servem para ler arquivos de texto:

Criar objeto da classe FileReader:

FileReader fr = new FileReader("diretório/arquivo.txt");
OBS: Pode receber um diretório ou um objeto File.

Criar objeto da classe BufferedReader:

BufferedReader br = new BufferedReader(fr);
OBS: Recebe como parâmetro um objeto da classe FileReader;
    
Ler as linhas de um arquivo:
 
   while( br.ready() ){

       String linha = br.readLine();
}

ou

   while ((linha = br.readLine()) != null) {
         linha = br.readLine();
}   

Ambas as classes devem ser fechadas:
br.close();
fr.close();

Exemplo de criação, leitura e escrita em um arquivo:


  public static void main(String[] args) {


        File arquivo = new File("arquivo.txt");//arquivo no local do projeto
        try {
            if (arquivo.exists() == false) {
                //se não haver esse arquivo ele cria um
                arquivo.createNewFile();
            }

            File[] arquivos = arquivo.listFiles(); //array para guardar as linhas do arquivo


            FileWriter fw = new FileWriter(arquivo, true);
            BufferedWriter bw = new BufferedWriter(fw);

            bw.write("Texto escrito");
            bw.newLine(); //adiciona uma linha
            bw.close();
            fw.close();


            FileReader fr = new FileReader(arquivo);
            BufferedReader br = new BufferedReader(fr);

            String linha = null;
            while ((linha = br.readLine()) != null) { //lê a linha, enquanto não for nula. Quando chegar ao término do arquivo a livro é nula.
                System.out.println(linha);
            }
            br.close();
            fr.close();
           
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }