Você está na página 1de 20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

Buscar

favorito(1)

marcarcomolido

tirardvidas

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)

CarosAmigos,
http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

1/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

AclasseArrayListpermiteacriaoeamanutenodeumacoleooulistaindexada
deobjetos.Comonosvetores,ndicesdeumArrayListsobaseadosemzero,isto,o
ndicedoprimeiroelementozero.Osmtodosfornecidospossibilitamamanipulao
deumelementobaseadanasuaposio(oundice)numricanalista,remover
determinadoelemento,procurarasocorrnciasdeumdadoelementoepercorrer
sequencialmentetodososelementosdalista.
MaisinformaessobreaclasseArrayListnaimplementaodevetoresdinmicos(ou
redimensionveis)podemserobtidasnoartigo"ExplorandoaClasseArrayListnoJava
".
Oscomputadoresutilizamosarquivoscomoestruturasdedadosparaarmazenamento
delongoprazodegrandesvolumesdedados.Dadosmantidosemarquivosso
chamadosdedadospersistentesporqueelesexistemalmdaduraodaexecuo
doprogramaemdispositivosdearmazenamentosecundriocomodisquete,disco
rgido,entreoutros.Emumarquivotextoosdadossoarmazenadoscomouma
sequnciadecaracteresdivididaemlinhasterminadasporumcaracteredefimde
linha.Osarquivosnoformatotextogeralmentesoencontradoscomnomescoma
extensopadroTXT(abreviaodeTEXT,outextoemingls)epodemser
facilmentelidosouabertosporqualquerprogramaqueltextoe,poressarazo,so
consideradosuniversais.
Osarquivostextoforamabordadosemoutros3(trs)artigos:
1.ArquivosefluxosdedadosRevistaEasyJavaMagazine12
2.CriandoeGravandodadosemTxtcomJava
3.LendodadosdeTxtcomJava
Aprogramaoestruturadaumaformadeprogramaodecomputadoresque
estabeleceumadisciplinaousistemticaparaodesenvolvimentodealgoritmos.
http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

2/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

medidaqueosprogramasvosetornandomaioresemaiscomplexos,possvel
simplificaremelhoraraclarezadividindooprogramaempartesmenores,chamadas
subprogramas.Umsubprogramaumnomedadoaumtrechodeumprogramamais
complexoeque,emgeral,encerraemsiprprioumpedaodasoluodeum
problemamaior(oprogramaaqueeleestsubordinado).Asoluoestruturada
orientadaaprocedimentos,blocosestruturadosdecdigosnaformadeprocedimentos
oufunes,emJava,mtodosacomunicaoentreosblocossefazutilizando
variveisglobais(noconstituiumaboaprticadeprogramao)epelapassagemde
dadosatravsdeparmetros.
Oselementoschavesdaprogramaoestruturadaforamabordadosnoartigo
"IntroduoProgramaoEstruturada".
AaplicaoJava,apresentadanaListagem1,mostraumasoluobaseadaemmenu
paracriaremanterumaagendadecontatosusandoaclasseArrayList(paraa
manipulaodosdadosnamemriaprimria)earquivotexto(napersistnciados
dados)atravsdeumaabordagemestruturada.
Listagem1:AplicaoJavaparacriaremanterumaagendadecontatos

importjava.io.BufferedReader;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.ArrayList;
importjava.util.Scanner;
publicclassExemplo{
publicstaticvoidmain(String[]args)throwsIOException{
ArrayList<String>agenda=newArrayList();
Scannerler=newScanner(System.in);
intopcao;

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

3/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

importar(agenda);
do{
System.out.printf("****MenuPrincipal*****\n");
System.out.printf("[1]IncluirContato\n");
System.out.printf("[2]ExcluirContato\n");
System.out.printf("[3]ListarContatos\n");
System.out.printf("[4]PesquisarContato\n");
System.out.printf("[0]EncerraroPrograma\n");
System.out.printf("\nOpoDesejada:");
opcao=ler.nextInt();
switch(opcao){
case1:incluir(agenda);break;
case2:excluir(agenda);break;
case3:listar(agenda);break;
case4:pesquisar(agenda);
}
System.out.printf("\n\n");
}while(opcao!=0);
exportar(agenda);
}
publicstaticvoidimportar(ArrayList<String>agenda){
try{
FileReaderarq=newFileReader("agenda.txt");
BufferedReaderlerArq=newBufferedReader(arq);
Stringlinha=lerArq.readLine();//laprimeiralinha
//avarivel"linha"recebeovalor"null"quandooprocesso
//derepetioatingirofinaldoarquivotexto
while(linha!=null){
agenda.add(linha);
linha=lerArq.readLine();//ldasegundaataltimalinha
}
arq.close();
}catch(IOExceptione){
System.err.printf("Erronaaberturadoarquivo:%s.",
e.getMessage());
}
}
publicstaticvoidexportar(ArrayList<String>agenda)
http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

4/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

throwsIOException{
FileWriterarq=newFileWriter("agenda.txt");
PrintWritergravarArq=newPrintWriter(arq);
inti,n=agenda.size();
for(i=0;i<n;i++){
gravarArq.printf("%s%n",agenda.get(i));
}
gravarArq.close();
}

publicstaticvoidincluir(ArrayList<String>agenda){
Scannerler=newScanner(System.in);
Stringnome,telefone;
System.out.printf("\nInformeonomedocontato:\n");
nome=ler.nextLine();
System.out.printf("\nInformeotelefonedocontato:\n");
telefone=ler.nextLine();
//gravaosdadosnofinalda"lista"
agenda.add(nome+";"+telefone);
}
publicstaticvoidexcluir(ArrayList<String>agenda){
Scannerler=newScanner(System.in);
inti;
listar(agenda);
System.out.printf("\nInformeaposioaserexcluda:\n");
i=ler.nextInt();
try{
agenda.remove(i);
}catch(IndexOutOfBoundsExceptione){
//exceolanadaparaindicarqueumndice(i)
//estforadointervalovlido(de0atagenda.size()1)
System.out.printf("\nErro:posioinvlida(%s).\n\n",
e.getMessage());
}
}
publicstaticvoidlistar(ArrayList<String>agenda){
System.out.printf("\nListadandoositensdaAgenda:\n");
http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

5/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

inti,n=agenda.size();
for(i=0;i<n;i++){
System.out.printf("Posio%d%s\n",i,agenda.get(i));
}
System.out.printf("");
}
publicstaticvoidpesquisar(ArrayList<String>agenda){
Scannerler=newScanner(System.in);
Strings;

System.out.printf("\nInformeonomedocontato:\n");
s=ler.nextLine();

inti,n=agenda.size();
s=s.toUpperCase();
Stringdados[];
for(i=0;i<n;i++){
//informando"joo",porexemplo,naentradaseromostrados
//todososcontatosquepossuem"joo"nonome
if(agenda.get(i).toUpperCase().indexOf(s)!=1){
dados=agenda.get(i).split(";");
System.out.printf("\nNome....:%s",dados[0]);
System.out.printf("\nTelefone:%s\n",dados[1]);
}
}
}
}

Opropsitoprincipaldaaplicaodesenvolvidanesteartigofoiexploraroselementos
chavesdaprogramaoestruturada,emdestaque,adivisodasoluoempartes
chamadasdemtodosemJavaeestabeleceracomuniodestesatravsde
parmetros.Inicialmentefoidefinidaumaestruturadedadosstringusandoaclasse
ArrayListparamanteraagendadecontatosatravsdadeclarao"ArrayListagenda=
newArrayList()".
Omenuprincipaldaaplicao,construdoegerenciadonomtodo"main",apresenta
asseguintesopesparaousuriofinal:[1]IncluirContato,[2]ExcluirContato,[3]
http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

6/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

ListarContatos,[4]PesquisarContatoe[0]EncerraroPrograma.Antesde
apresentaromenu,omtodo"importar"invocadopararecuperarosdados
persistidosnoarquivotexto"agenda.txt",mostradonaFigura1.Cadalinhadoarquivo
textorepresentaumcontato,noformato"nometelefone",queserolidoseimportados
paraamemriaprincipalnoArrayList"agenda".Aoescolheraopo"[0]Encerrar
Programa"destavezserexecutadoomtodo"exportar"parapersistirnamemria
secundria,arquivotexto"agenda.txt",osdadosmantidosnoArrayList"agenda".

Figura1:Arquivotexto"agenda.txt"com3(trs)contatoscadastrados
Descrevendoasrotinasexecutadasversusopesdomenuprincipal:
[1]IncluirContato:chamaomtodo"incluir",solicitaaousurioosdadosdeum
contato,nomeetelefone,eadicionaonovocontatonofinaldalistaatravsdo
comando"agenda.add(nome+""+telefone)".
[2]ExcluirContato:chamaomtodo"excluir",mostratodososcontatos
cadastradosnalistaeobtmondicedoelementoaserexcludo.Removeoisimo
elementoda"agenda"comocomando"agenda.remove(i)"verificandoaexceo
"IndexOutOfBoundsException"queindica"ndiceforadointervalovlido,de0at
agenda.size()1".
[3]ListarContatos:chamaomtodo"listar",mostratodososcontatoscadastrados
nalistausandoondiceeomtodo"get"nainstruo"agenda.get(i)".
http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

7/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

[4]PesquisarContato:chamaomtodo"pesquisar",solicitaaousurioumaparte
donomedocontatoaserpesquisado.Percorrealista,usandoondice,mostrando
todososcontatosquepossuememseunomeaparteinformadapelousurio
(independentedecaracteresmaisculoseminsculos).Estaverificaorealizada
atravsdaexpressolgica"agenda.get(i).toUpperCase().indexOf(s)!=1".
AoexecutaraaplicaoosresultadosapresentadosnaFigura2poderoserexibidos.

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

8/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

BaixeoAPP

Login

Figura2:Executandoasopesdomenuprincipal

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

9/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

Obrigadoeumabrao.
Prof.OmeroFranciscoBertolhttp://www.pb.utfpr.edu.br/omero/
AplicaesJava(http://www.pb.utfpr.edu.br/omero/Java/Fontes.HTM)
PublicadonoCanalJava

porOmeroFrancisco
ExpertemJavaeprogramaoWeb

Ajudenosaevoluir:vocgostoudopost?

(1) (0)

Compartilhe:

Ficoucomalgumadvida?
Postaquisuadvidaoucomentrioquenossaequiperesponderomais
rpidopossvel.

Alice

Qualaclassequeprecisaserimportadanoprojeto,parautilizarmosaimpresso
detextosnojava?

importjava.io.PrintText

importjava.io.Print

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

10/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

importjava.io.Writer

importjava.io.Text

importjava.io.PrintWriter
h30dias

[autor]OmeroBertolh30dias

OlAlice.Desculpe,vocgostariadeusaraimpressora?Oqueespecificamente
vocgostariadeimprimir?

Adicionarumcomentrio...

YureSantana

Bomdia,observeiqueexisteumerronessecdigo,daformaqueelefoiescritoos
dadosnopersistememumarquivo,nomtodoincluirfaltouchamaraomtodo
exportarevoctambmnoindicaaondeoarquivosersalvo(caminhoemdisco

),segueocdigocorrigido.

packageagenda.estruturada;
importjava.io.BufferedReader;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.PrintWriter;

importjava.util.ArrayList;

importjava.util.Scanner;

importjava.util.logging.Level;

importjava.util.logging.Logger;

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

11/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

/**

*@authorYure

*/

publicclassAgendaEstruturada{

/**

*@paramargsthecommandlinearguments

*/

publicstaticvoidmain(String[]args){

try{

//InstanciandoaclasseArrayListparauso

ArrayList<String>agenda=newArrayList<String>();

//InstanciandoaClasseScanner

Scannerler=newScanner(System.in);

//Opoqueserpassadapelousurionaescolhadomenu

intopcao;

importar(agenda);//importandoosdados

do{

System.out.println("*****MenuPrincipal*****");

System.out.println("[1]IncluirContato");

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

12/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

System.out.println("[2]ExcluirContato");

System.out.println("[3]ListarContatos");

System.out.println("[4]PesquisarContatos");

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

opcao=ler.nextInt();

switch(opcao){

case1:incluir(agenda);break;

case2:excluir(agenda);break;

case3:listar(agenda);break;

case4:pesquisar(agenda);break;

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

}while(opcao!=0);

exportar(agenda);//Exportandoosdados

}catch(IOExceptionerr){

err.getMessage();

/**MtodoqueirimportarosdadosparaLista*/

publicstaticvoidimportar(ArrayList<String>agenda){

try{

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

13/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

FileReaderarq=newFileReader("C:\\agenda

BufferedReaderlerArq=newBufferedReader(

Stringlinha=lerArq.readLine();//lapri

//avarivel"linha"recebeovalor"null"

//derepetioatingirofinaldoarquivo

while(linha!=null){

agenda.add(linha);

linha=lerArq.readLine();//lda

arq.close();

}catch(IOExceptionerr){

System.err.printf("Erronacoberturadoa

/**Mtodoparabuscarosdadosdalista*/

publicstaticvoidexportar(ArrayList<String>agenda)th

FileWriterarq=null;

try{

arq=newFileWriter("C:\\agenda.txt");

}catch(IOExceptione){

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

14/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

//TODOAutogeneratedcatchblock

e.printStackTrace();

PrintWritergravarArq=newPrintWriter(arq);

inti;

intn=agenda.size();

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

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

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

gravarArq.close();

publicstaticvoidincluir(ArrayList<String>agenda)

Scannerler=newScanner(System.in);

Stringnome,telefone;

System.out.printf("|Informeonomedocontato\n

nome=ler.nextLine();

System.out.printf("|Informeotelefonedoconta

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

15/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

telefone=ler.nextLine();

//Gravaosdadosnofimdalista

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

try{

exportar(agenda);

}catch(IOExceptionex){

Logger.getLogger(AgendaEstruturada.clas

publicstaticvoidexcluir(ArrayList<String>agenda)

Scannerler=newScanner(System.in);

inti;

listar(agenda);

System.out.printf("\nInformeoindicedaposi

i=ler.nextInt();

try{

agenda.remove(i);

}catch(IndexOutOfBoundsExceptionerr){

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

16/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

//exceolanadaparaindicarqueumndice(

//estforadointervalovlido(de0atagen

System.out.printf("\nErro:Posioinvlida

publicstaticvoidlistar(ArrayList<String>agenda){

System.out.printf("\nListandoositensdaagend

inti,n=agenda.size();

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

System.out.printf("Posio%d%s\n",i,agen

System.out.printf("

publicstaticvoidpesquisar(ArrayList<String>agend

Scannerler=newScanner(System.in);

Strings;

System.out.printf("\nInformeonomedocontato\

s=ler.nextLine();

s=s.toUpperCase();

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

17/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

Stringdados[];

inti,n=agenda.size();

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

//informando"joo",porexemplo,nae

//todososcontatosquepossuem"joo"

if(agenda.get(i).toUpperCase().indexOf(

dados=agenda.get(i).split(":");

System.out.printf("\nNome....:%s\n"

System.out.printf("\nTelefone:%s\n"

h+1ms

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

18/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

[autor]OmeroBertolh+1ms

Yure...Perfeito.Obrigadopelassuascontribuies.Abraos.

EdsonPessottih+1ms

Oieissomesmo.
ParamimqueusoLinuxcolo

EdsonPessottih+1ms

Coloqueiopathcompleto/home/eu/arquivo.txt
Tambmoproblemadapersistnciapassapelaraodequeaosairmosdo
metodoaagendaapaga,
adeclaraodaagendacomostaticforadosmetodosresolveoproblema.
MuitobomoPostocodigoemuitoricoemdetalhesesolues.parabens...

[autor]OmeroBertolh+1ms

OlEdson.Obrigadopelosseuscomentrios.Abraos.

Adicionarumcomentrio...

Maisposts
Artigo

DevOps: Como adequar seu processo de CI a essa nova


cultura
Artigo

Primeiros passos com o WildFly Swarm


Revista

Revista Java Magazine 150


http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

19/20

04/06/2016

ClasseArrayListeArquivoTexto:AgendadeContatosUmaAbordagemEstruturadaemJava

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 | Faleconosco

DevMedia
CurtirPgina

106milcurtidas

Sejaoprimeirodeseusamigosacurtirisso.

HospedagemwebporPorta80WebHosting

http://www.devmedia.com.br/classearraylistearquivotextoagendadecontatosumaabordagemestruturadaemjava/25087

20/20