Linguagens de Programação Fluxo de Dados: Entrada e Saída
Um Pacotes para E/S O pacote java.io fornece um grande número de classes para tratar entrada e saída de dados transferência de dados do programa para fontes externas e vice-versa entrada e saída de dados envolve o uso de fluxos (streams)
Um Pacotes para E/S Dados sendo enviados para um programa Dados sendo enviados por um programa
Fluxo de Informações Sequência de bytes que fluem para dentro ou para fora do programa
Copiando arquivos (P1)–byte streams FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("ensinamento.txt"); //http://www.cin.ufpe.br/~maod/lpoo/ensinamento.txt out = new FileOutputStream("outroarquivo.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } } finally { if (in != null) { in.close(); if (out != null) { out.close();
Copiando arquivos Notar que: read() retorna um valor inteiro É importante para identificar o fim de arquivo = “-1” Sempre feche as streams Byte streams devem ser usados apenas com entrada/saída de dados primitivos
Streams Um stream é uma abstração de um fluxo contínuo de dados em uma única direção As classes que manipulam streams podem ser agrupadas em dois tipos: byte streams classes InputStream e OutputStream character streams classes Reader e Writer
Character streams Quando a internacionalização é a prioridade Faz as adaptações automaticamente Classes usadas: Reader Writer FileReader FileWriter
Copiando (P2)–character streams FileReader inputStream = null; FileWriter outputStream = null; try { inputStream = new FileReader(“amizade.txt"); outputStream = new FileWriter(“outroarquivo2.txt"); int c; while ((c = inputStream.read()) != -1) { outputStream.write(c); } } finally { if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } } }
Line-oriented I/O I/O de caracteres ocorrem em grandes quantidades I/O orientada a linha de caracteres permite ler uma sequência de caracteres terminada por: carriage-return/line-feed sequence(“\r\n”) carriage-return(“\r”) line-feed(“\n”) Classes usadas BufferredReader and PrintWriter
Line-oriented I/O – (P3) FileReader inputStream = null; FileWriter outputStream = null; try { inputStream = new FileReader("amor.txt"); outputStream = new FileWriter("arquivo.txt"); int c; while ((c = inputStream.read()) != -1) { outputStream.write(c); }
Exercício Seja o seguinte registro: nome, idade, sexo, estadoCivil; Utilizar a entrada/saída de streams de caracteres para criar um programa para gravar em um arquivo os dados formatados do registro acima; Utilizar a entrada/saída de streams de caracteres para criar um programa para ler de um arquivo os dados formatados gravados em um arquivo;
A classe Scanner Usando outro delimitador Objetos da classe Scanner são úteis para formatar entradas separando os campos em “white spaces” '\u0009' HORIZONTAL TABULATION. '\u000A', LINE FEED. '\u000B', VERTICAL TABULATION. '\u000C', FORM FEED. '\u000D', CARRIAGE RETURN. Usando outro delimitador s.useDelimiter(",\\s*");
A classe Scanner Scanner s = null; try { s = new Scanner(new BufferedReader(new FileReader("ausencia.txt"))); // s.useDelimiter(",\\s*"); while (s.hasNext()) { System.out.println(s.next()); } } finally { if (s != null) { s.close();