Entrada e Saída Marco Antonio Arquiteto de Software Dezembro/2007.

Slides:



Advertisements
Apresentações semelhantes
TRATAMENTO DE ARQUIVOS EM C
Advertisements

Python: Entrada e Saída
Programação em Java Prof. Maurício Braga
I/O Carlos Bazilio Depto de Ciência e Tecnologia
Programação em Java Prof. Maurício Braga
Classes Abstratas e Interfaces
Reflexão Marco Antonio Arquiteto de Software Novembro/2007.
Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Modificadores Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008.
Utilitários Marco Antonio. Enum Como o nome sugere, é uma enumeração de opções para uma determinada situação A principal vantagem é limitar as opções.
Collections Marco Antonio, Arquiteto de Software – TJDF Atualizado Dezembro/2008.
Java Básico Orientação a Objeto Marco Antonio Software Architect Fev/2008.
Relatórios Marco Antonio Software Architect Agosto
Java Básico Arrays Marco Antonio, Arquiteto de Software – TJDF Atualizado: Fevereiro/2009.
Comunicação entre processos distribuídos
Tratamento de Exceções
Persistência de objetos em arquivo texto usando Java
Streams Java.
Prof. Luis Otavio Alvares
Invocação de Métodos Remotos RMI
Wagner Santos C. de Jesus
Arquivos. 2 Namespace System.IO Toda as classes relacionadas com dispositivos de entrada e saída encontram-se em System.IO Incluir no início do programa:
Tratamento de Ficheiros
Excepções e Streams em Java
Estrutura de Dados em Java
Concorrência em Java Threads em Java.
Infra-Estrutura de Comunicação (IF678) Aula Prática 02 – CIn/UFPE Davi Duarte Denyson José Eduardo Souza Ivan França Rafael Lima.
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Nazareno Andrade (baseado no material de Hyggo Almeida)
PROGRAMAÇÃO ESTRUTURADA II
Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior
Streams –input e output
Programação I Aula 2 (Métodos)
Aula Prática 12 Operações com Arquivos Monitoria
Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System.
Aula 13 - Armazenamento de Dados em Arquivos
Arquivos if669 - Introdução à Programação Monitoria de IP Igor Ebrahim (ies) Nicole Sultanum (nbs2) Paulo Borba (phmb)
1 Introdução a C# Sharp Shooters.NET Universidade Federal de Pernambuco Centro de Informática Recife, 15/08/2002 Autor: Marden Menezes Costa.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Stream – Fluxo I/O Sistema de Arquivos
BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de Arquivos em Java.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Stream – Fluxo I/O Manipulação de arquivos texto
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
1 JAVA I/O (Entrada e Saída em JAVA) Prof. Alexandre Monteiro Recife.
Profa. Patrícia A. Jaques
Tratamento de Exceções
Programação Orientada a Objetos - Java
Aula Prática 4 Monitoria IP/CC (~if669).
Capítulo 6 Exceções.
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
Estrutura de Controle em JAVA
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Operações com Arquivos Monitoria A estrutura FILE  É como um tipo de dado, mas não é um tipo propriamente dito  Definido no arquivo cabeçalho.
M ÉTODOS DA C LASSE S TRING. FUNÇÕES COM STRING Uma string é um tipo texto que corresponde à união de um conjunto de caracteres. Em Java, as strings são.
April 05 Prof. Ismael H. F. Santos - 1 Modulo II – Tópicos em Java - IO Prof. Ismael H F Santos.
Linguagem I Strings.
Aula Prática 11 Operações com Arquivos Monitoria
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Redes de Computadores I Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Socket em Java.
Programação Distribuída em Java Aula Na aula passada vimos: I/O Streams Filtros Readers and Writers.
Programação Distribuída em Java Aula Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos.
Arquivos. Os computadores utilizam os arquivos como estruturas de dados para armazenamento de longo prazo de grandes volumes de dados. Dados mantidos.
© Copyright 2008 Algoritmos e Estruturas de Dados 1 IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Adriana Libório Fernandes Lins Arthur Cavalcanti.
Capítulo 10. Stream – Fluxo I/O  Introdução  Principais Exceptions  Arquivos binários java.io.InputStream java.io.FileInputStream java.io.ByteArrayInputStream.
Java Básico Lab Ruddá Beltrão | Cristian Costa.
Prof.: Jean Carlo Mendes
Transcrição da apresentação:

Entrada e Saída Marco Antonio Arquiteto de Software Dezembro/2007

Introdução Input e Output fazem parte do pacote java.io Esse pacote tem uma quantidade grande de classes que dão suporte a operações de entrada e saída As classes básicas são InputStream e OutputStream

Hierarquia de classes Veja as diversas classes do pacote

Tipos de Streams Existem dois tipos de Streams: binário e texto No primeiro a gente pode transferir bytes (arquivos, por exemplo), no segundo, caracteres

InputStream InputStream é usada para ler dados como bytes de uma fonte qualquer (arquivo, String, memória) É uma classe abstrata Você deve fechar seu Stream após o uso, ou esperar que seja coletado pelo Garbage collector

Hierarquia de InputStream Você deve usar uma dessas subclasses Cada uma tem um propósito diferente

OutputStream OutputStream é similar a sua colega É usada para escrever bytes em alguma fonte Você pode ler do disco e gravar na memória, ler um objeto e gravar no disco... Todas as combinações são válidas, você faz de acordo com a conveniência

Hierarquia Mais uma vez você só pode usar uma das subclasses de OutputStream

O projeto Crie o ProjetoStream no eclipse

File Essa classe trabalha com os arquivos do computador de forma independente Dessa forma, você pode escrever código que manipula arquivos independentemente da plataforma Um objeto do tipo File pode representar tanto um arquivo como um diretório Quando ele é criado, o SO não checa a existência efetiva do arquivo/diretório

Principais métodos f.exists() – true se o arquivo existir f.isFile() – true se é um arquivo f.isDirectory() – true se é um diretório f.getName() – nome do arquivo/diretório f.length() – número de bytes de um arquivo f.getPath() – nome do caminho f.delete() – apaga f.renameTo(f2) – renomeia para f2 f.createNewFile() – cria o arquivo (pode disparar IOException)

Exemplo package net.stream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; public class TrabalhandoComArquivos { public static void main(String[] args) throws Exception { File arquivo = new File("c:/install.log"); System.out.println(Existe: + arquivo.exists()); System.out.println(Nome do arquivo: + arquivo.getName()); System.out.println(Tamanho em bytes: + arquivo.length()); } //Teste outros métodos!!!

LeitorDeArquivos package com.javabasico.entradaesaida; import java.io.*; public class LeitorDeArquivos { public static void main(String[] args) { File diretorio = new File("/Users/marcoreis/Software"); if (diretorio.isDirectory()) { for (String nomeDoArquivo : diretorio.list()) { String caminho = diretorio.getPath(); File arquivo = new File(caminho + "/" + nomeDoArquivo); if (arquivo.isFile()) { System.out.print(arquivo.getName() + " - "); long tamanhoEmMB = arquivo.length() / 1024; System.out.println(tamanhoEmMB + "MB"); }

Escrevendo arquivos Uma operação bastante utilizada no desenvolvimento de software é a criação de arquivos Podemos fazer de diversas formas diferentes Para tanto, vamos começar com arquivos texto mais simples As classes usadas: FileOutputStream e FileInputStream

Escrevendo arquivos package net.stream; import java.io.File; import java.io.FileOutputStream; public class EscrevendoArquivos { public static void main(String[] args) { 1. try { 2. File f = new File("c:/NovoArquivo.txt"); 3. FileOutputStream fo = new FileOutputStream(f); 4. String texto = "Este é o texto que vamos gravar no arquivo"; texto = texto + "\nEsta é a segunda linha"; 5. fo.write(texto.getBytes()); 6. fo.close(); 7. System.out.println("Arquivo gravado com sucesso"); 8. } catch (Exception e) { e.printStackTrace(); }

Detalhamento 1.Tratamento de exceção obrigatório 2.Arquivo a ser criado/atualizado 3.OutputStream para arquivos 4.Texto a ser gravado 5.Gravação do texto na saída (NovoArquivo.txt). Atenção: em geral, os bytes são transferidos em forma de array 6.Não podemos esquecer de fechar o recurso 7.Mensagem de confirmação 8.Tratamento de exceção é extremamente indicado

Lendo arquivos Para ler um arquivo (ou qualquer outra fonte de dados) através da stream, devemos recuperar uma linha de cada vez, ou seja, fazer um loop até chegar no fim dos dados Temos basicamente 2 métodos para trabalhar com streams: read() e write() Existem diversas variações para as mais variadas situações. No fim das contas o princípio é o mesmo: escreve depois lê. Pronto

Lendo arquivos package net.stream; import java.io.File; import java.io.FileInputStream; public class LendoArquivos { public static void main(String[] args) { try { 1. File f = new File("c:/NovoArquivo.txt"); 2. FileInputStream fi = new FileInputStream(f); 3. int i = 0; 4. while(i!=-1){ 5. i = fi.read(); 6. char c = (char) i; 7. System.out.print(c); } } catch (Exception e) { e.printStackTrace(); }

Detalhamento Ponteiro para o arquivo a ser lido InputStream para ler o arquivo Vamos ler os bytes do arquivos e armazenar na variável i A flag que indica fim do arquivo é i = -1, ou seja, vamos ler enquanto não encontrar esse valor Lê um byte de cada vez Converte de inteiro para char (int e char são iguais) Imprime o caracter

Lendo do buffer package net.stream; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; public class LendoLinhasInteiras { public static void main(String[] args) { try { 1. FileInputStream fi = new FileInputStream("c:/NovoArquivo.txt"); 2. InputStreamReader ir = new InputStreamReader(fi); 3. BufferedReader br = new BufferedReader(ir); 4. String linha; 5. while ((linha = br.readLine()) != null) { 6. System.out.println(linha); } } catch (Exception e) { e.printStackTrace(); }

Detalhes 1.InputStream para leitura de arquivos 2.O reader funciona como um leitor específico para o buffer, possibilitando a leitura de uma linha inteira. De outra forma, somente byte a byte 3.Leitor do buffer 4.Variável que vai armazenar as linhas do arquivo 5.Fazemos a atribuição e a comparação ao mesmo tempo 6.Imprime a linha do arquivo

Serializando objetos Em algumas situações precisamos transportar objetos pela rede. Antes disso, o objeto precisa ser gravado no disco (serializado), depois é só enviar por um socket para o computador remoto Vamos criar uma classe de teste e serializá- la no disco Depois a gente recupera a mesma, preservando seu estado

Classe de teste package net.stream; import java.io.Serializable; public class AlgumaClasse implements Serializable { private String nome; private String outroNome; private String maisOutroNome; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getOutroNome() { return outroNome; } public void setOutroNome(String outroNome) { this.outroNome = outroNome; } public String getMaisOutroNome() { return maisOutroNome; } public void setMaisOutroNome(String maisOutroNome) { this.maisOutroNome = maisOutroNome; }

Serializando package net.stream; import java.io.FileOutputStream; import java.io.ObjectOutputStream; public class SerializandoObjetos { public static void main(String[] args) { try { 1. AlgumaClasse a = new AlgumaClasse(); a.setMaisOutroNome("a"); a.setNome("b"); a.setOutroNome("c"); 2. FileOutputStream fo = new FileOutputStream("c:/classe.tmp"); 3. ObjectOutputStream ou = new ObjectOutputStream(fo); 4. ou.writeObject(a); 5. ou.close(); 6. fo.close(); System.out.println("Objeto serializado"); } catch (Exception e) { e.printStackTrace(); }

Detalhes 1.Criamos o objeto e atribuímos valores 2.Stream para o arquivo de saída 3.Stream para trabalhar com objetos 4.Escreve o objeto no arquivo 5.Fecha o stream de objetos 6.Fecha o stream do arquivo

Lendo do disco Agora que gravamos, precisamos recuperar o objeto do disco, não é? O núcleo de tudo é o método readObject(), que é bastante sugestivo Vamos

Deserializar package net.stream; import java.io.FileInputStream; import java.io.ObjectInputStream; public class DeserializandoObjetos { public static void main(String[] args) { try { 1. FileInputStream fi = new FileInputStream("c:/classe.tmp"); 2. ObjectInputStream oi = new ObjectInputStream(fi); 3. Object o = oi.readObject(); 4. AlgumaClasse a = (AlgumaClasse) o; 5. System.out.println(a.getMaisOutroNome()); System.out.println(a.getNome()); System.out.println(a.getOutroNome()); oi.close(); fi.close(); } catch (Exception e) { e.printStackTrace(); }

Passo a passo 1.InputStream para ler um arquivo do disco 2.InputStream para ler um objeto 3.Lê o objeto do disco. Atenção: sempre trabalhamos com Object, o que nos obriga a fazer cast de tudo 4.Faz o cast para AlgumaClasse 5.Imprime os valores do objeto recuperado

PrintWriter Classe para impressão rápida de caracteres em um OutputStream, inclusive fazendo formatação No nosso exemplo, a saída vai ser um arquivo texto Existe outra classe chamada PrintStream que trabalha com bytes

PrintWriter package net.stream; import java.io.File; import java.io.PrintWriter; public class UsandoPrintWriter { public static void main(String[] args) { try { File f = new File("c:/ArquivoPrintWriter.txt"); PrintWriter p = new PrintWriter(f); p.print("primeira linha"); p.println("segunda linha"); p.write("terceira linha"); p.close(); } catch (Exception e) { e.printStackTrace(); }

Dúvidas?