classe arraylist e arquivo texto_ agenda de contatos - uma abordagem estruturada em java

Upload: jura-costa

Post on 28-Feb-2018

241 views

Category:

Documents


3 download

TRANSCRIPT

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    1/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 1/20

    Buscar

    favorito (1) marcar como lido tirar dvidas

    Classe ArrayList e Arquivo

    Texto: Agenda de Contatos -

    Uma Abordagem Estruturada

    em Java

    Veja neste artigo uma aplicao Java para criar e manter uma

    agenda de contatos, com os campos nome e telefone, usando a

    classe ArrayList e arquivo texto atravs de uma abordagem que

    explora os elementos chaves da programao estruturada.

    (1) (0)

    Caros Amigos,

    http://www.devmedia.com.br/favorite/add_finished.asp?comp=25087http://www.devmedia.com.br/favorite/addfavorite.asp?comp=25087
  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    2/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 2/20

    A classe ArrayList permite a criao e a manuteno de uma coleo ou lista indexada

    de objetos. Como nos vetores, ndices de um ArrayList so baseados em zero, isto , o

    ndice do primeiro elemento zero. Os mtodos fornecidos possibilitam a manipulao

    de um elemento baseada na sua posio (ou ndice) numrica na lista, remover

    determinado elemento, procurar as ocorrncias de um dado elemento e percorrer

    sequencialmente todos os elementos da lista.

    Mais informaes sobre a classe ArrayList na implementao de vetores dinmicos (ou

    redimensionveis) podem ser obtidas no artigo "Explorando a Classe ArrayList no Java

    ".

    Os computadores utilizam os arquivos como estruturas de dados para armazenamento

    de longo prazo de grandes volumes de dados. Dados mantidos em arquivos so

    chamados de dados persistentes porque eles existem alm da durao da execuo

    do programa em dispositivos de armazenamento secundrio como disquete, disco

    rgido, entre outros. Em um arquivo texto os dados so armazenados como umasequncia de caracteres dividida em linhas terminadas por um caractere de fim de

    linha. Os arquivos no formato texto geralmente so encontrados com nomes com a

    extenso padro TXT (abreviao de TEXT, ou texto em ingls) e podem ser

    facilmente lidos ou abertos por qualquer programa que l texto e, por essa razo, so

    considerados universais.

    Os arquivos texto foram abordados em outros 3 (trs) artigos:

    1.Arquivos e fluxos de dados - Revista Easy Java Magazine 12

    2. Criando e Gravando dados em Txt com Java

    3. Lendo dados de Txt com Java

    A programao estruturada uma forma de programao de computadores que

    estabelece uma disciplina ou sistemtica para o desenvolvimento de algoritmos.

    http://www.devmedia.com.br/lendo-dados-de-txt-com-java/23221http://www.devmedia.com.br/criando-e-gravando-dados-em-txt-com-java/23060http://www.devmedia.com.br/arquivos-e-fluxos-de-dados-revista-easy-java-magazine-12/22859
  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    3/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 3/20

    medida que os programas vo se tornando maiores e mais complexos, possvel

    simplificar e melhorar a clareza dividindo o programa em partes menores, chamadas

    subprogramas. Um subprograma um nome dado a um trecho de um programa mais

    complexo e que, em geral, encerra em si prprio um pedao da soluo de um

    problema maior (o programa a que ele est subordinado). A soluo estruturada

    orientada a procedimentos, blocos estruturados de cdigos na forma de procedimentos

    ou funes, em Java, mtodos a comunicao entre os blocos se faz utilizando

    variveis globais (no constitui uma boa prtica de programao) e pela passagem de

    dados atravs de parmetros.

    Os elementos chaves da programao estruturada foram abordados no artigo

    "Introduo Programao Estruturada".

    A aplicao Java, apresentada na Listagem 1, mostra uma soluo baseada em menu

    para criar e manter uma agenda de contatos usando a classe ArrayList (para a

    manipulao dos dados na memria primria) e arquivo texto (na persistncia dosdados) atravs de uma abordagem estruturada.

    Listagem 1:Aplicao Java para criar e manter uma agenda de contatos

    import java.io.BufferedReader;

    import java.io.FileReader;

    import java.io.FileWriter;import java.io.IOException;

    import java.io.PrintWriter;

    import java.util.ArrayList;

    import java.util.Scanner;

    public class Exemplo {

    public static void main(String[] args) throws IOException {

    ArrayList agenda = new ArrayList();Scanner ler = new Scanner(System.in);

    int opcao;

    http://www.devmedia.com.br/introducao-a-programacao-estruturada/24951
  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    4/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 4/20

    importar(agenda);

    do {

    System.out.printf("**** Menu Principal *****\n");

    System.out.printf("[ 1 ] Incluir Contato\n");

    System.out.printf("[ 2 ] Excluir Contato\n");

    System.out.printf("[ 3 ] Listar Contatos\n");

    System.out.printf("[ 4 ] Pesquisar Contato\n");

    System.out.printf("[ 0 ] Encerrar o Programa\n");

    System.out.printf("\nOpo Desejada: ");

    opcao = ler.nextInt();

    switch (opcao) {

    case 1: incluir(agenda); break;

    case 2: excluir(agenda); break;

    case 3: listar(agenda); break;

    case 4: pesquisar(agenda);

    }

    System.out.printf("\n\n");

    } while (opcao != 0);

    exportar(agenda);}

    public static void importar(ArrayList agenda) {

    try {

    FileReader arq = new FileReader("agenda.txt");

    BufferedReader lerArq = new BufferedReader(arq);

    String linha = lerArq.readLine(); // l a primeira linha

    // a varivel "linha" recebe o valor "null" quando o processo

    // de repetio atingir o final do arquivo textowhile (linha != null) {

    agenda.add(linha);

    linha = lerArq.readLine(); // l da segunda at a ltima linha

    }

    arq.close();

    } catch (IOException e) {

    System.err.printf("Erro na abertura do arquivo: %s.",

    e.getMessage());

    }}

    public static void exportar(ArrayList agenda)

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    5/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 5/20

    throws IOException {

    FileWriter arq = new FileWriter("agenda.txt");

    PrintWriter gravarArq = new PrintWriter(arq);

    int i, n = agenda.size();

    for (i=0; i

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    6/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 6/20

    int i, n = agenda.size();

    for (i=0; i

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    7/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 7/20

    Listar Contatos, [ 4 ] Pesquisar Contato e [ 0 ] Encerrar o Programa. Antes de

    apresentar o menu, o mtodo "importar" invocado para recuperar os dados

    persistidos no arquivo texto "agenda.txt", mostrado na Figura 1. Cada linha do arquivo

    texto representa um contato, no formato "nometelefone", que sero lidos e importados

    para a memria principal no ArrayList "agenda". Ao escolher a opo "[ 0 ] Encerrar

    Programa" desta vez ser executado o mtodo "exportar" para persistir na memria

    secundria, arquivo texto "agenda.txt", os dados mantidos no ArrayList "agenda".

    Figura 1:Arquivo texto "agenda.txt" com 3 (trs) contatos cadastrados

    Descrevendo as rotinas executadas versus opes do menu principal:

    [ 1 ] Incluir Contato:chama o mtodo "incluir", solicita ao usurio os dados de um

    contato, nome e telefone, e adiciona o novo contato no final da lista atravs do

    comando "agenda.add(nome + "" + telefone)".

    [ 2 ] Excluir Contato:chama o mtodo "excluir", mostra todos os contatos

    cadastrados na lista e obtm o ndice do elemento a ser excludo. Remove o i-simo

    elemento da "agenda" com o comando "agenda.remove(i)" verificando a exceo

    "IndexOutOfBoundsException" que indica "ndice fora do intervalo vlido, de 0 at

    agenda.size()-1".

    [ 3 ] Listar Contatos:chama o mtodo "listar", mostra todos os contatos cadastrados

    na lista usando o ndice e o mtodo "get" na instruo "agenda.get(i)".

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    8/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 8/20

    [ 4 ] Pesquisar Contato:chama o mtodo "pesquisar", solicita ao usurio uma parte

    do nome do contato a ser pesquisado. Percorre a lista, usando o ndice, mostrando

    todos os contatos que possuem em seu nome a parte informada pelo usurio

    (independente de caracteres maisculos e minsculos). Esta verificao realizada

    atravs da expresso lgica "agenda.get(i).toUpperCase().indexOf(s) != -1".

    Ao executar a aplicao os resultados apresentados na Figura 2 podero ser exibidos.

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    9/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 9/20

    Figura 2:Executando as opes do menu principal

    LoginBaixe o APP

    http://www.devmedia.com.br/app/http://www.devmedia.com.br/
  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    10/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 10/20

    Obrigado e um abrao.

    Prof. Omero Francisco Bertol http://www.pb.utfpr.edu.br/omero/

    Aplicaes Java (http://www.pb.utfpr.edu.br/omero/Java/Fontes.HTM)

    Publicado no Canal Java

    por Omero FranciscoExpert em Java e programao Web

    Ajude-nos a evoluir: voc gostou do post? (1) (0)

    Compartilhe:

    Post aqui sua dvida ou comentrio que nossa equipe responder o maisrpido possvel.

    Ficou com alguma dvida?

    Alice

    Qual a classe que precisa ser importada no projeto, para utilizarmos a impresso

    de textos no java?

    import java.io.PrintText

    import java.io.Print

    http://www.devmedia.com.br/autor/omero-francisco-bertol/268250http://www.devmedia.com.br/java/http://www.pb.utfpr.edu.br/omero/Java/Fontes.HTMhttp://www.pb.utfpr.edu.br/omero/
  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    11/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 11/20

    import java.io.Writer

    import java.io.Text

    import java.io.PrintWriter

    h 30 dias

    [autor]Omero Bertol h 30 dias

    Ol Alice. Desculpe, voc gostaria de usar a impressora? O que especificamente

    voc gostaria de imprimir?

    Adicionar um comentrio...

    Yure Santana

    Bom dia, observei que existe um erro nesse cdigo, da forma que ele foi escrito os

    dados no persistem em um arquivo, no mtodo incluir faltou chamar a o mtodo

    exportar e voc tambm no indica aonde o arquivo ser salvo(caminho em disco

    ), segue o cdigo corrigido.

    package agenda.estruturada;

    import java.io.BufferedReader;

    import java.io.FileReader;

    import java.io.FileWriter;

    import java.io.IOException;

    import java.io.PrintWriter;

    import java.util.ArrayList;

    import java.util.Scanner;

    import java.util.logging.Level;

    import java.util.logging.Logger;

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    12/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 12/20

    /**

    *

    * @author Yure

    */

    public class AgendaEstruturada {

    /**

    * @param args the command line arguments

    */

    public static void main(String[] args) {

    try{

    //Instanciando a classe ArrayList para uso

    ArrayListagenda = new ArrayList();

    //Instanciando a Classe Scanner

    Scanner ler = new Scanner(System.in);

    //Opo que ser passada pelo usurio na escolha do men

    int opcao;

    importar(agenda);//importando os dados

    do{

    System.out.println("***** Menu Principal *****");

    System.out.println("[1] Incluir Contato");

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    13/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 13/20

    System.out.println("[2] Excluir Contato");

    System.out.println("[3] Listar Contatos");

    System.out.println("[4] Pesquisar Contatos");

    System.out.println("[0] Encerrar Programa\n");

    opcao = ler.nextInt();

    switch(opcao){

    case 1:incluir(agenda);break;

    case 2:excluir(agenda);break;

    case 3:listar(agenda);break;

    case 4:pesquisar(agenda);break;

    }

    System.out.println("\n");

    }while(opcao!=0);

    exportar(agenda);//Exportando os dados

    }catch(IOException err){

    err.getMessage();

    }

    }

    /**Mtodo que ir importar os dados para Lis

    public static void importar(ArrayList

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    14/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 14/20

    FileReader arq = new FileReader

    BufferedReader lerArq = new Buf

    String linha = lerArq.readLine(

    // a varivel "linha" recebe o

    // de repetio atingir o final

    while(linha!=null){

    agenda.add(linha);

    linha = lerArq.readLine

    }

    arq.close();

    }catch(IOException err){

    System.err.printf("Erro na co

    }

    }

    /**Mtodo para buscar os dados da lista*/

    public static void exportar(ArrayList

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    15/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 15/20

    // TODO Autogenerated catch block

    e.printStackTrace();

    }

    PrintWriter gravarArq = new PrintWriter(arq);

    int i;

    int n = agenda.size();

    for (i = 0; i < n; i++) {

    gravarArq.printf(agenda.get(i));

    gravarArq.printf("\r\n");

    }

    gravarArq.close();

    }

    public static void incluir(ArrayList

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    16/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 16/20

    telefone = ler.nextLine();

    //Grava os dados no fim da lista

    agenda.add(nome + ":" + telefone);

    try {

    exportar(agenda);

    } catch (IOException ex) {

    Logger.getLogger(AgendaEstr

    }

    }

    public static void excluir(ArrayList

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    17/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 17/20

    // exceo lanada para indicar que

    // est fora do intervalo vlido (d

    System.out.printf("\nErro: Posi

    }

    }

    public static void listar(ArrayList

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    18/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 18/20

    String dados[];

    int i, n = agenda.size();

    for(i = 0;i

  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    19/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    http://www.devmedia.com.br/classe-arraylist-e-arquivo-texto-agenda-de-contatos-uma-abordagem-estruturada-em-java/25087 19/20

    Mais posts

    Artigo

    DevOps: Como adequar seu processo de CI a essa nova

    cultura

    Artigo

    Primeiros passos com o WildFly Swarm

    Revista

    Revista Java Magazine 150

    [autor]Omero Bertol h +1 ms

    Yure... Perfeito. Obrigado pelas suas contribuies. Abraos.

    Edson Pessotti h +1 ms

    Oi e isso mesmo.

    Para mim que uso Linux colo

    Edson Pessotti h +1 ms

    Coloquei o path completo /home/eu/arquivo.txt

    Tambm o problema da persistncia passa pela rao de que ao sairmos do

    metodo a agenda apaga,

    a declarao da agenda como static fora dos metodos resolve o problema.

    Muito bom o Post o codigo e muito rico em detalhes e solues. parabens...

    [autor]Omero Bertol h +1 ms

    Ol Edson. Obrigado pelos seus comentrios. Abraos.

    Adicionar um comentrio...

    http://www.devmedia.com.br/revista-java-magazine-150/34653http://www.devmedia.com.br/primeiros-passos-com-o-wildfly-swarm/34483http://www.devmedia.com.br/devops-como-adequar-seu-processo-de-ci-a-essa-nova-cultura/34484
  • 7/25/2019 Classe ArrayList e Arquivo Texto_ Agenda de Contatos - Uma Abordagem Estruturada Em Java

    20/20

    04/06/2016 Classe ArrayList e Arquivo Texto: Agenda de Contatos - Uma Abordagem Estruturada em Java

    Artigo

    Introduo ao Java 9: Conhea os novos recursos

    Artigo

    Como usar o Apache Cassandra em aplicaes Java EE

    Parte 2

    Listar mais contedo

    Publique | Assine | Fale conosco

    Hospedagem web por Porta 80 Web Hosting

    Seja o primeiro de seus amigos a curtir isso.

    DevMedia106 mil curtidasCurtir Pgina

    https://www.facebook.com/DevmediaWeb03/https://www.facebook.com/DevmediaWeb03/https://www.facebook.com/DevmediaWeb03/https://www.facebook.com/raelson.ronehttps://www.facebook.com/edsonmiguel.edsonmarahttps://www.facebook.com/skinapi.caremuahttps://www.facebook.com/wsartscomhttps://www.facebook.com/pauloderossimbunga.derossihttps://www.facebook.com/domigosvit.mingosandahttps://www.facebook.com/guess.avexhttps://www.facebook.com/tiiago.siiilvahttps://www.facebook.com/gildo.quimuenguehttps://www.facebook.com/irene.barros.12https://www.facebook.com/people/Anthony-Frank/100005685304954https://www.facebook.com/jonathan.topanottihttps://www.facebook.com/lucajane.lucajanehttp://www.porta80.com.br/http://www.devmedia.com.br/fale-conosco/http://www.devmedia.com.br/mvp/http://www.devmedia.com.br/seja-um-autor-devmedia/28103http://www.devmedia.com.br/feed/https://plus.google.com/101753743720604160232?prsrc=3http://twitter.com/devmediahttp://www.facebook.com/pages/DevMedia/144522665592650http://www.devmedia.com.br/javahttp://www.devmedia.com.br/como-usar-o-apache-cassandra-em-aplicacoes-java-ee-parte-2/34479http://www.devmedia.com.br/introducao-ao-java-9-conheca-os-novos-recursos/34481