waldeck/curso/java
-
Upload
rodrigo-vieira -
Category
Technology
-
view
1.453 -
download
0
description
Transcript of waldeck/curso/java
Inteligência Artificial
Reinaldo Bianchi
FEI - Elétrica
2000
7a. Aula
Arrays (vetores e matrizes),
Entrada e Saída de Dados, Arquivos
Vimos na aula passada
Applets Gráficos
Nesta aula veremos:
Arrays:– Vetores – Matrizes
Entrada e saída de dados Arquivos
Arrays (ou Vetores)
Um array permite o agrupamento de um conjunto de informações em uma única variável.
Também conhecido como vetor ou variável indexada.
Tem um tamanho definido. Sempre iniciado no valor ‘0’:
a b d nceh kvet
0 1 2 3 4 5 6 7
Arrays: Declaração
Sintaxe:<tipo>[] <nome> = new <tipo>[<tamanho>];
Declarando: int[] meuArray = new int[10];
String[] fala = new String[20]; Uso:
meuArray[7] = 345;
Arrays: inicialização, etc.
Inicializando um array:
int[] A = {10, 2, 3, 44, 55}; Tamanho de um array:
A.length = guarda o tamanho
Ver exemplo Array.java
Exercício Arrays
Multiplique 2 vetores guardados em array de tamanho 3.
O primeiro array se chama A, o segundo B.
Result =0;
For (int i =0;i<3;i++)
Result = Result + A[i]* B[i];
Arrays de duas dimensões: Matrizes Matrizes são arrays com DUAS dimensões:
– Podem ser vistos como tabelas que são guardadas na memória
– Imagens Sintaxe:
– <tipo> <nome>[][] = new <tipo> [<linhas>][<colunas>];
Existem arrays com mais dimensões...
Matriz - Exemplo
int matriz[][] = new int [10][5];
0 0 0 1 0 2 0 3 0 41 02 03 04 05 06 07 08 09 0 9 4
Inicializando matrizes
int minhamatriz[][] =
{ {1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16} };
Programa Exemplo
Ver programa ImprimeMatriz.java Insira dados nas posições:
– linha = 7, coluna = 3– linha = 3, coluna = 0– linha = 5, coluna = 4
Modifique o programa para imprimir a matriz “bonitinha” (isto é, cada linha na sua)
Exercício
Faça um programa que multiplique duas matrizes quadradas de tamanho 3
Entrada e Saída de Dados
Em Java toda entrada e saída de dados é realizada através de Streams:
trabalha com diversos dispositivos:– teclado:
• BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
– arquivos– páginas web, ...
Classes básicas para tratamento de entrada e saída em Java File:
– É uma classe para guardar informações sobre os arquivos
InputStream:– Classe para a leitura dos dados.
OutputStream:– Classe para escrita de dados.
RandomAccessFile:– Classe para arquivos de acesso aleatório.
Arquivos
Usados para guardar dados permanentes em disco (óbvio).
Existem diversos tipos de arquivos:– Arquivos seqüenciais (Stream based).– Arquivos de acesso aleatório.
Em Java, Streams são usadas para tratar os arquivos seqüenciais:– Streams são usados como buffers de entrada e
saída para os arquivos.
Hierarquia de classes java.io
class java.io.File class java.io.InputStream
– class java.io.ByteArrayInputStream– class java.io.FileInputStream– class java.io.FilterInputStream– class java.io.BufferedInputStream– class java.io.DataInputStream – class java.io.ObjectInputStream
Hierarquia de classes java.io (continuação) class java.io.OutputStream
– class java.io.ByteArrayOutputStream– class java.io.FileOutputStream– class java.io.FilterOutputStream– class java.io.BufferedOutputStream– class java.io.DataOutputStream (implements
java.io.DataOutput)– class java.io.PrintStream– class java.io.ObjectOutputStream
class java.io.RandomAccessFile
Classe File
Representação abstrata e independente de plataforma de um arquivo.
Guarda informações sobre os arquivos:– nome– localização do arquivo
Manipula arquivos:– cria, deleta, copia, compara, verifica existência
de um arquivo, cria diretórios, lista diretórios, ...
Classe InputStream
Classe abstrata da qual derivam todas as classes para leitura de dados
Classe FileInputStream:– Sub-classe de InputStream que dá acesso
aos arquivos.– Implementa InputStream.
Todo tratamento de entrada e saída é feito entre um try ... catch
Métodos básicos do InputStream
read ():– Lê um inteiro. Retorna -1 quando chega ao final da stream
de entrada (que pode ser o arquivo). read(byte b[]):
– Lê múltiplos bytes e os guarda em um array. available():
– Retorna a quantidade de dados ainda existentes skip(long):
– Salta n bytes da entrada e os descarta close():
– Fecha o arquivo (chamado automaticamente)
Exemplo
Para abrir um arquivo:InputStream is = new FileInputStream("bytedata.dat");
– Cria-se um Stream de entrada que usa o FileInputStream para abrir o arquivo.
Para ler um dado:b = is.read();
Exemplos LeByte.java e LeTexto.java
Classe DataInputStream
Sub-Classe de InputStream para ler dados genéricos.
Possui métodos que lêem e convertem automaticamente diversos tipos de dados.
Usado em conjunto com InputStream:InputStream is = new FileInputStream("textfile.txt");
DataInputStream ds = new DataInputStream(is);
Ver LeLinha.java
Métodos do DataInputStream
boolean readBoolean(); byte readByte(); char readChar(); int readInt(); float readFloat(); Stream readLine(); ...
Classe OutputStream
Classe básica para saída de dados. Contraparte da classe InputStream. FileOutputStream:
– Sub-classe de OutputStream que dá acesso aos arquivos.
DataOutputStream:– Idem da DataInputStream para saída de
dados.
Métodos do OutputStream
write(b):– Escreve um inteiro.
write(byte b[]):– Escreve múltiplos bytes de um array.
flush():– Força a escrita de dados que podem estar em
buffers. close():
– Fecha o arquivo (deve ser chamado manualmente, se não pode-se perder dados)
Exemplo
Para abrir um arquivo:FileOutputStream os = new FileOutputStream("bytedata.dat”);
– Cria-se um Stream de saída que usa o FileOutputStream para abrir o arquivo.
Para escrever um dado:os.write(dado);
Exemplos EscreveBytes.java e EscreveDataStream
Buffered Streams
Usados para entrada e saída de dados bufferizadas:– Buffer significa que os dados são guardados
na memória até que se tenha uma certa quantidade, quando então os dados são escritos ou lidos
Classes:– BufferedInputStream– BufferedOutputStream
Arquivos de Acesso Aleatório
Arquivos que permitem o acesso de um dado específico do arquivo
Funciona como um array em disco: – define-se um índice e se pode ler ou escrever
naquele lugar. Usados para implementar qualquer base de
dados decente. Implementado com a classe
RandomAccessFile
Classe RandomAccessFile
Implementa os arquivos de acesso aleatório em Java.
Sub classe direta de Object. Mais poderosa que as classes
FileInputStream e FileOutputStream. Implementa métodos de leitura, escrita e
posicionamento para todos os tipos primitivos.
Abrindo um arquivo aleatóreo
Esta classe possui 2 construtores:– RandomAccessFile(String nome, String
modo)– RandomAccessFile(File file, String modo).
O parâmetro modo indica como o arquivo poderá ser utilizado:– se for "r": arquivo só de leitura.– "rw”: arquivo de leitura e escrita.
Métodos mais importantes
seek():– move um ponteiro que define onde será
realizada a leitura ou a escrita para um novo ponto no arquivo
lenght():– retorna o tamanho do arquivo em bytes.
getFilePointer():– descobre onde está o ponteiro no arquivo.
close()
Métodos de Leitura
read()– método básico de leitura de bytes
readFloat(float v):– Lê um float de 4 bytes no arquivo
readInt(int v):– lê um inteiro de 4 bytes no arquivo
readLong(long v)– lê um inteiro de 8 bytes no arquivo
readShort(int v): lê inteiro de 2 bytes
Métodos de Escrita
write():– método básico de escrita de bytes.
writeFloat(float v):– Guarda um float de 4 bytes no arquivo usando a
função floatToIntBitsmethod writeInt(int v):
– escreve um inteiro de 4 bytes no arquivo writeLong(long v)
– escreve um inteiro de 8 bytes no arquivo
Leitura e escrita de Strings
String readLine():– lê uma linha do arquivo (terminada com “\n” e
retorna para uma String. String readUTF():
– lê uma string do tipo UFT. writeChars(String s)
– escreve a string s no arquivo. writeUTF(String str):
– escreve a String como UFT.
Exemplo
RandomFile.java:– Escreve e Lê números inteiros de um
arquivo.
Bancos de dados complexos
Para aplicações de bancos de dados mais complexos, em Java se utiliza:– JDBC: permite ligar o programa Java a um
banco de dados SQL, DB2, ...– Java DataExpress– dbSwing– etc...
Opção meio porca:serialização de objetos.
Conclusão
Arrays:– Vetores– Matrizes
Arquivos:– FileInputStream– FileOutputStream– RandomAccessFile