140 likes | 242 Views
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
E N D
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 • 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(); • } • }