Manipulação de arquivo

Propaganda
BC0502 – Metodologia e Algoritmos
Assunto: Roteiro Java – Arquivos
Aula Prática: 05
1. Introdução
Nesta prática, resolveremos um exercício sobre arquivos, tema abordado na aula teórica
desta semana. Os arquivos permitem que o programa acesse e envie dados externos a ele. Java
permite lidar com todos os tipos de entrada e saída através de uma abstração conhecida como
stream (canal, fluxo de dados). Streams são unidirecionais e podem ser de dois tipos:
− Leitura: para obter informações externas;
− Escrita: para enviar informações.
O pacote java.io define um grande número de classes para ler e escrever streams. As classes são divididas em dois grupos, baseadas no tipo de dados sobre os quais operam:
− InputStream e OutputStream: E/S de dados binários (tipo byte)
− Reader e Writer: E/S de caracteres (tipo char) no padrão Unicode (16 bits)
A seguir são apresentados exemplos da implementação do uso de arquivos de texto. São
duas classes:
- UsarArquivo, que contém o programa principal;
- GerenciamentoArquivos, que contém os métodos para a leitura e escrita de dados
em um arquivo.
public class UsarArquivo
{
public static void main( String[] args )
{
String nome[]=new String [3];
int idade[]=new int [3];
double nota[] = new double [3];
nome[0] = "José da Silva"; nome[1] = "Márcia Bastos";
nome[2] = "Carla Pereira";
idade[0] = 23;
idade[1] = 20;
idade[2] = 18;
nota[0] = 7.5;
nota[1] = 7;
nota[2] = 8.5;
GerenciamentoArquivos gerente =
new GerenciamentoArquivos();
gerente.escrita( "teste.dat", nome, idade, nota );
gerente.leitura( "teste.dat" );
}
}
1
import java.io.*;
public class GerenciamentoArquivos
{
public void escrita ( String nomeArq, String[] vet1, int[] vet2,
double[] vet3 )
{
try
{
FileWriter arq = new FileWriter( nomeArq );
PrintWriter out = new PrintWriter( arq );
for ( int i=0; i<vet1.length; i++ )
{
String linha = vet1[i] + ":" + vet2[i] + ":" +
vet3[i];
out.println( linha );
}
out.close();
}
}
catch ( IOException erro )
{
System.out.println ( "Erro na escrita dos dados" );
}
//fim do método escrita()
public void leitura ( String nomeArq )
{
try
{
FileReader ent = new FileReader( nomeArq );
BufferedReader br = new BufferedReader ( ent );
String linha;
String[] campos = null;
while ( (linha = br.readLine()) != null )
{
campos = linha.split( ":" );
String nome = campos[ 0 ];
int idade = Integer.parseInt(campos[1]);
double nota = Double.parseDouble(campos[2]);
System.out.println( "Nome: " + nome + "\nIdade: "
+ idade + "\nNota: " + nota );
}
br.close();
}
catch ( IOException erro )
2
{
System.out.println ( "Erro na leitura dos dados" );
}
}
} // Fim do método leitura()
// Fim da classe GerenciamentoArquivos
2. Exercício da aula – Campeonato de Futebol
Em um campeonato de futebol, quatro times (A, B, C e D) jogam partidas no esquema
turno-returno. Para dois times A e B, sendo o turno disputado no campo de A, o returno é
disputado no campo de B. Os resultados dos jogos encontram-se armazenados em um
arquivo, em um formato como no exemplo abaixo:
*;v;e;v
e;*;e;d
v;v;*;d
e;v;e;*
Este arquivo pode ser entendido como uma matriz, da seguinte forma:
A
B
C
D
A
*
e
v
e
B
v
*
v
v
C
e
e
*
e
D
v
d
d
*
O símbolo “v” indica vitória do time da casa, o símbolo “e” indica empate e o símbolo
“d” indica derrota do time da casa. O símbolo “*” indica a informação “não importa”, pois um
time não joga contra si mesmo. Assim, cada linha apresenta os resultados de um time em seu
campo. Ou seja, a primeira linha corresponde aos resultados do time A quando ele jogou em
seu campo. Temos assim que: A venceu B, empatou com C e venceu D. As colunas
representam então os resultados de cada time nos campos dos adversários, porém nesse caso o
símbolo “v” significa derrota no campo do adversário (= vitória do time da casa) e o símbolo
“d” significa vitória no campo do adversário (= derrota do time da casa). Para a primeira
coluna, temos: A empatou com B, perdeu de C e empatou com D.
Faça um programa em Java que leia essa matriz do arquivo, armazenando-a em uma
matriz do tipo String, e forneça o número total de pontos obtido por cada time no
campeonato (turno e returno) em um arquivo “resultados.txt”. Não é necessário fornecer a
classificação final dos quatro times. Considere que cada vitória vale 3 pontos no campeonato,
os empates valem um ponto e as derrotas, 0 pontos. O programa deve pedir para o usuário os
nomes dos times A, B, C e D.
Dicas:
Use o projeto “campeonato_set2007” já iniciado, que se encontra compactado dentro do
mesmo módulo no COL. O aplicativo deve ser composto por três classes. Uma para o
programa
principal
(Campenoato.java),
uma
para
a
manipulação
dos
arquivos
(GerenciamentoArquivos.java) e outra para a manipulação dos cálculos de pontos do
3
campeonato (Pontos.java), sendo que esta classe já está completamente pronta, para facilitar.
O uso de blocos de tratamento de exceções (try – catch) é obrigatório, pois caso
contrário o compilador Java vai acusar um erro. Para ganhar ainda mais tempo, copie e cole
trechos de código dos exemplos acima para o seu programa. Para facilitar, o método de leitura
dos dados do arquivo para dentro da matriz também já está implementado na classe
GerenciamentoArquivos.
No NetBeans, o programa considera a pasta atual como sendo a pasta do projeto (onde
será gravado o arquivo de saída “resultados.txt” e onde deve estar o arquivo de entrada
“matriz.txt”).
3. Exercício para trabalhar em casa – Continuação
2) Considere que, no exemplo anterior, os times A, B, C e D são correspondentes a
Grêmio, Boca Juniors, Santos e Cúcuta, quatro primeiro colocados da Libertadores. Gere um
novo arquivo para um campeonato Europeu, em que os times são: Milan, Real Madrid,
Liverpool e Bayer de Munique. Preencha a matriz como no exercício 1, porém alterando o seu
conteúdo, como desejado. Obtenha as classificações para esses dois grupos de times. Os dois
primeiros colocados de cada campeonato participarão do Mundial do Japão e o disputarão em
turno e returno também. Forneça então a classificação final desses times no Mundial em um
arquivo “mundial.txt”. Atente para o fato de que será necessário manipular dois arquivos de
entrada: do campeonato brasileiro e do campeonato europeu e ainda um arquivo de saída
(mundial).
4
Download