Top Banner
I/O I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense
21

I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Apr 16, 2015

Download

Documents

Internet User
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

I/OI/O

Carlos Bazilio

Depto de Ciência e TecnologiaPólo Universitário de Rio das OstrasUniversidade Federal Fluminense

Page 2: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

IntroduçãoIntrodução

● Arquivos fornecem aos sistemas uma alternativa para persistência de dados;

● Com isso, informações gravadas num momento podem ser recuperadas noutro, “mesmo que a luz acabe”;

● Em Java, interfaces e classes para a manipulação de arquivos estão disponíveis no pacote “java.io” (http://java.sun.com/javase/6/docs/api/java/io/package-summary.html).

Page 3: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Tipos de ArquivosTipos de Arquivos

● Arquivos podem armazenar caracteres (arquivo texto) ou bytes (arquivos binários);

● Na prática, arquivos textos são abertos por editores de texto simples, enquanto que arquivos binários precisam ser abertos por programas específicos;

● Exemplos de arquivos:

Texto (qualquer arquivo que só armazene texto): .txt, .xml, .bat …

Binário (possuem uma codificação de bytes específica): .doc, .exe, .zip, …

Page 4: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Abertura de ArquivosAbertura de Arquivos

● Arquivos podem ser abertos para leitura (arquivo já existente) ou escrita (tanto faz);

● Esta abertura é usualmente realizada através da chamada à um construtor de classe apropriado (new):

FileInputStream e FileOutputStream para leitura e escrita de arquivos vistos como uma sequência de bytes;

FileReader e FileWriter para leitura e escrita de arquivos vistos como uma sequência de caracteres;

Page 5: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Fechamento de ArquivosFechamento de Arquivos

● Para o fechamento utilizamos o método close();● Antes da chamada a este método, o arquivo

manipulado fica “bloqueado” para o programa que o utiliza;

● Por isso, é uma prática recomendável fechar o arquivo imediatamente após a sua utilização.

Page 6: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Exemplo de Leitura de Exemplo de Leitura de Arquivo BinárioArquivo Binário

import java.io.*;public class MostraArquivo {public static void main(String[] args) {InputStream fi = null; int i = -1;try {

fi = new FileInputStream("c:\\teste.txt");} catch (FileNotFoundException e) {

System.out.println("Arquivo não encontrado !!");}do {

try {i = fi.read();

} catch (IOException e) {System.out.println("Arquivo não pode ser

lido !!");}if (i != -1)

System.out.print((char) i);} while (i != -1);

}}

Page 7: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Exemplo de Leitura de Exemplo de Leitura de Arquivo TextoArquivo Texto

import java.io.*;

public class MostraArquivoTexto {

public static void main(String[] args) {

BufferedReader in = null;

try {

in = new BufferedReader(new FileReader("c:\\teste.txt"));

String str;

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

System.out.println(str);

}

in.close();

} catch (IOException e) {

}

}

}

Page 8: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Diferenças na Leitura de Diferenças na Leitura de Arquivos Texto e BinárioArquivos Texto e Binário

● Pudemos observar que o arquivo binário dado estava sendo processado byte a byte;

● Em contra-partida, o arquivo texto estava sendo acessado linha por linha (método readLine());

● Por processar vários bytes ao mesmo tempo, a leitura linha por linha é mais simples;

● Em arquivos binários não há o conceito de linha.

Page 9: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Manipulação de Arquivos Manipulação de Arquivos BináriosBinários

● A manipulação de arquivos binários possibilita mais eficiência no tratamento de arquivos;

● Para exemplificar, apresentaremos um exemplo de gravação de objetos (serialização);

● Neste exemplo, criaremos um conjunto de objetos, gravaremos estes num arquivo binário, e posteriormente recuperaremos seu conteúdo;

● Para um objeto ser serializável, sua classe precisa implementar a classe java.io.Serializable;

● Objetos que usualmente não são serializáveis são threads, sockets, etc.

● Mais informações: http://java.sun.com/developer/technicalArticles/Programming/serialization/

Page 10: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Manipulação de Arquivos Manipulação de Arquivos Binários 1/4Binários 1/4

import java.io.*;

public class Registro implements Serializable {int id;float nota;static int quant = 0;

public Registro (float n) {quant++;id = quant;nota = n;

}

Page 11: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Manipulação de Arquivos Manipulação de Arquivos Binários 2/4Binários 2/4

public static void main(String[] args) {

InicializaRegistros();RecuperaRegistros();

}

Page 12: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Manipulação de Arquivos Manipulação de Arquivos Binários 3/4Binários 3/4

public static void InicializaRegistros() {try { Registro reg = null;

FileOutputStream f = new FileOutputStream("c:\\dados.dat");

ObjectOutputStream fobj = new ObjectOutputStream(f);for (int i=1; i<=10; i++) {

reg = new Registro(i);fobj.writeObject(reg);

}fobj.close();f.close();} catch (FileNotFoundException e) {} catch (IOException e) {}

}

Page 13: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Manipulação de Arquivos Manipulação de Arquivos Binários 4/4Binários 4/4

public static void RecuperaRegistros() {try {

FileInputStream f = new FileInputStream("c:\\dados.dat");

ObjectInputStream fobj = new ObjectInputStream(f);

for (int i=1; i<=10; i++) {Registro reg = (Registro)fobj.readObject();System.out.print("Id: " + reg.id);System.out.println(" Nota: " + reg.nota);

}fobj.close(); f.close();} catch (FileNotFoundException e) {} catch (IOException e) {} catch (ClassNotFoundException e) {}

}

Page 14: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Parte

da H

iera

rquia

de

Parte

da H

iera

rquia

de

Cla

sses d

e ja

va.io

Cla

sses d

e ja

va.io

Page 15: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Classe FileClasse File

● A classe File provê construtores e métodos para a obtenção de dados sobre arquivos

● Esta classe apresenta uma visão abstrata e independente do sistema operacional utilizado para referência a arquivos e diretórios

Page 16: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Classe FileClasse File

● Como exemplo de abstração, o campo estático File.separator indica o caracter usado para separar nomes em caminhos: (‘\’ no Windows e ‘/’ no Linux)

● Uma ilustração desta abstração acontece quando criamos um objeto do tipo File com 2 argumentos diferentes: ..\cursojava\temp\teste.txt ../cursojava/temp/texte.txt

● Em ambos os casos, ele converterá os separadores para o formato do sistema em uso

● Observe que este caracter também pode ser obtido como uma propriedade do sistema: System.getProperty(“file.separator”)

Page 17: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Classe FileClasse File

● Alguns métodos importantes oferecidos por esta classe: public File(String nome) throws

NullPointerException;● Construtor que cria uma referência para o arquivo com o nome passado como argumento;

public File(String dir, String nome) throws NullPointerException;

● Similar ao construtor dado acima. Entretanto, também pode ser fornecido o nome do diretório onde o arquivo será referenciado;

Page 18: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Classe FileClasse File● Outros métodos importantes :

public String[] getPath();● Caminho completo do arquivo

public void mkdir() throws SecurityException;● Cria um novo diretório

public boolean renameTo(File novo) throws SecurityException;

● Renomeia o diretório para o valor que é passado por parâmetro

public boolean delete() throws SecurityException;

● Remove o arquivo ao qual o método foi aplicado

Page 19: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Exemplo de Uso da Classe Exemplo de Uso da Classe FileFile

import java.io.File;

public class ExemploFile {public static void main(String[] args) {

File f = new File("c:\\teste.txt");if (f.exists()){

System.out.println("Dados do arquivo " + f.getAbsolutePath());

System.out.println("Tamanho: " + f.length() + " bytes");

System.out.println("Pode ser escrito? " + (f.canWrite() ? "sim" : "não"));

}}

}

Page 20: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

ExercíciosExercícios

● Implemente o exemplo de arquivos binários.● Faça um programa que crie uma cópia de um

arquivo texto.

Page 21: I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Solução do Segundo Solução do Segundo ExercícioExercício

import java.io.*;

public class CopiaArquivoTexto {

public static void main(String[] args) {

BufferedReader in = null; BufferedWriter out = null;

try {

in = new BufferedReader(new FileReader("c:\\teste.txt"));

out = new BufferedWriter(new FileWriter("c:\\teste2.txt"));

String str;

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

out.write(str);

}

in.close();

out.close();

} catch (IOException e) {

}

}

}