Fundamentos de programação

Documentos relacionados
1 Da aula teórica ao Java

LÓGICA DE PROGRAMAÇÃO (JAVA) VARIÁVEIS. Professor Carlos Muniz

Classes, instâncias e métodos de acesso. prática

Prof. A. G. Silva. 13 de novembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de / 1

PROGRAMAÇÃO I A LINGUAGEM DE PROGRAMAÇÃO JAVA II

Introdução a JAVA. Variaveis, tipos, expressões, comandos e blocos

Tipos primitivos de Java Entrada de Dados Formatação da Saída. Aula 03

Linguagem Java. Introdução. Rosemary Silveira Filgueiras Melo

Aula 2 POO 1 Prática. Profa. Elaine Faria UFU

Introdução a JAVA. Variáveis, tipos, expressões, comandos e blocos

Sintaxe Básica do Java. João Paulo Q. dos Santos

Linguagem de programação Strings

Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Maratona Mineira de Programação 2012

3.1 - Funções para manipular dados de entrada e saída padrão

Programação de Computadores para GI

ECT1203 Linguagem de Programação

Linguagem de programação Strings

Vetores Unimensionais

Fundamentos de programação

Seleção Múltipla Laços (while, do-while, for) AULA 05

Algoritmos e Programação

Linguagem de Programação C

Programação Orientada a Objetos II

Vetores Unimensionais

Estruturas de Repetição e String. Vanessa Braganholo

Vetores Unimensionais

Entrada e Saída Exercício. Linguagem Java. Adenilso da Silva Simão 01/09/05

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

2 Orientação a objetos na prática

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Variáveis Compostas. Vanessa Braganholo

A Linguagem C. A forma de um programa em C

Programação Orientada a Objetos II Java Segunda aula. Prof. Rogério Albuquerque de Almeida

Programação: Entrada e Saída de Dados

Como pôde verificar, a criação de um objecto do tipo File não cria o ficheiro em disco.

Aula 3 Constantes e funções de E/S

Arquivos. Vanessa Braganholo

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Linguagem C. André Tavares da Silva.

LÓGICA DE PROGRAMAÇÃO (JAVA) ESTRUTURAS REPETIÇÃO. Professor Carlos Muniz

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Hierarquia de classes. Veja as diversas classes do pacote

Arrays em Java. Introdução à Programação. Bruno Cartaxo

Entrada Processamento Saída

Lição 4 Fundamentos da programação

Capturando Entrada de Dados Através do Teclado

Desenvolvendo aplicações Java

Introdução a Linguagem C. Prof. Me. Hélio Esperidião

3. Linguagem de Programação C

ALGORITMOS. Professor: Diego Oliveira. Aula 06 - Tipos Primitivos de Dados

Universidade Federal de Uberlândia Faculdade de Computação GGI030 Programação Orientada a Objetos 1o. Semestre de 2017 Prof.

Computação Eletrônica. Aula 12 Arquivos Texto e Binário. Prof: Luciano Barbosa. CIn.ufpe.br

Strings. Exercício Prático 4 Conhecendo API String. Nome:

Introdução à programação competitiva. Professor Tomás O. Junco Vázquez

Criar a classe Aula.java com o seguinte código: Compilar e Executar

Programação de Computadores 1 Lista 2. Prof. Álvaro A. F. de Souza DECSI - ICEA - UFOP

Algoritmia e Programação APROG. Ficheiros de Texto. Java. Nelson Freire (ISEP DEI-APROG 2014/15) 1/18

Aula 7 Modularização. Processamento da Informação. Universidade Federal do ABC

Departamento de Sistemas de Computação Universidade de São Paulo Introdução a Ciência de Computação I. Aula 13 Arquivos

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Linguagem C: Introdução

CURSO BÁSICO DE PROGRAMAÇÃO AULA 11. Revisão Aula Anterior Vetores Cadeia de Caracteres

Programação Básica. Estrutura de um algoritmo

Introdução à Programação

Fundamentos de programação

MsC. João Maria MsC. Liviane Melo

1ª Lista de Exercícios

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Manipulação de Arquivos

Linguagem de programação Java

INF 1620 P4-09/07/03 Questão 1 Nome:

Faculdade de Computação

Curso Básico de Programação Aula 11. Revisão Aula Anterior Laços de Repetição While; Do-While; For.

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo

Variáveis Compostas. Leonardo Gresta Paulino Murta.

Preparação para Maratona de Informática PYTHON

Ambiente de Programação, rastreamento e entrada de dados. MCG114 Programação de Computadores I. Interpretador de Comandos. Interpretador de Comandos

A linguagem C (visão histórica)

Linguagem C Entrada/Saída (console)

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Java API. Giuliana Silva Bezerra

Conceitos básicos. Computação eletrônica: Gurvan Huiban

Fundamentos da programação Parte - 1

Capítulo 4. Tipos fundamentais de dados. Tipos primitivos em Java. Tipos numéricos. Constantes. Expressões aritméticas. Strings.

01. [Sebesta, 2000] Defina exceção, manipulador de exceções, levantamento de uma exceção, desativação de uma exceção e exceção incorporada.

Introdução à Linguagem Java

Disciplina de Algoritmos e Programação

CCO 016 Fundamentos de Programação

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes

Estruturas de Repetição e String

Array em Java. Figura 1 - Exemplo de um array de inteiros

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Aula 28: Arquivos de texto

modificador h instrui a função printf( ) a exibir um short int. Portanto, %hu indica que o dado é do tipo short unsigned int.

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Computação para Engenharia Ambiental

Capítulo 6: Arquivos

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

Transcrição:

Fundamentos de programação Arquivos Entrada/Saída e formatação Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno

Arquivos Arquivos de texto são muito usados para armazenar informações Tanto números quanto palavras podem ser armazenados como texto Arquivos de texto são o tipo de arquivos de dados mais portável que existe A classe Scanner pode ser usada para ler arquivos de texto Ela também é usada para entrada de dados via teclado Ler de um arquivo exige a classe File A classe PrintWriter pode ser usada para escrever arquivos de texto Ela permite usar métodos familiares como print(), println() e printf()

Arquivos Entrada (Leitura) Cria-se um objeto da classe File Passa-se para ele o nome do arquivo entre aspas File inputfile = new File("input.txt"); Então cria-se um objeto da classe Scanner Passa-se para ele o novo objeto File Scanner in = new Scanner(inputFile); Então usa-se os métodos de Scanner, tais como: next(), nextline(), hasnextline(), hasnext(), nextdouble(), nextint(), etc. while (in.hasnextline()) { String line = in.nextline(); // Process line; }

Arquivo Saída (escrita) Cria-se um objeto da classe PrintWriter Passa-se para ele o nome do arquivo que deve ser escrito entre aspas PrintWriter out = new PrintWriter("output.txt"); Se output.txt existir, ele será esvaziado Se output.txt não existir, ele será criado vazio PrintWriter é uma versão melhorada de PrintStream System.out é um objeto PrintStream System.out.println("Hello World!"); print(), println() e printf() são métodos herdados que podem ser usados para escrever em arquivos: out.println("hello, World!");

Arquivo Fechamento O método close() deve ser chamado depois que a leitura ou escrita estiverem completos Fechando um Scanner while (in.hasnextline()) { } String line = in.nextline(); // Process line; in.close(); Fechando um PrintWriter out.println("hello, World!"); out.printf("total: %8.2f\n", totalprice); out.close(); O conteúdo escrito em um arquivo pode não ter sido definitivamente salvo em disco até close() ser chamado

Imports necessários Para usar E/S de arquivo e suas exceções, algumas diretivas import do pacote java.io deverão ser usadas import java.io.file; import java.io.filenotfoundexception; import java.io.printwriter; import java.util.scanner; public class LineNumberer { public void openfile() throws FileNotFoundException { //... } }

Exemplo total.java import java.io.file; import java.io.filenotfoundexception; import java.io.printwriter; import java.util.scanner; /** This program reads a file with numbers, and writes the numbers to another file, lined up in a column and followed by their total. */ public class Total { public static void main(string[] args) throws FileNotFoundException { // Prompt for the input and output file names Scanner console = new Scanner(System.in); System.out.print("Input file: "); String inputfilename = console.next(); System.out.print("Output file: "); String outputfilename = console.next();...

} } Exemplo total.java // Construct the Scanner and PrintWriter objects for reading and writing File inputfile = new File(inputFileName); Scanner in = new Scanner(inputFile); PrintWriter out = new PrintWriter(outputFileName); // Read the input and write the output double total = 0; while (in.hasnextdouble()) { double value = in.nextdouble(); out.printf("%15.2f\n", value); total = total + value; } out.printf("total: %8.2f\n", total); in.close(); out.close();

Erros comuns Contra-barras em nomes de arquivos: Quando se usa uma string constante como nome de arquivo com informação sobre o caminho, deve-se usar contra-barras duplas: File inputfile = new File("c:\\homework\\input.dat"); Uma contra-barra única em um string corresponde a um caractere de escape, o que significa que o próximo caractere será interpretado de forma diferente (por exemplo, \n para o caractere de nova linha) Porém quando o usuário fornece um nome de arquivo com caminho a partir do terminal, não é preciso digitar contra-barras duplas

Erros comuns Construindo um Scanner com um string: Quando se constrói um PrinterWriter com um string, ele escreve neste arquivo: PrintWriter out = new PrintWriter("output.txt"); Isto não funciona com um objeto Scanner: Scanner in = new Scanner("input.txt"); // Error? Isto não abre o arquivo. Em vez disto, simplesmente se faz a leitura a partir do string especificado Para ler de um arquivo, passa-se para Scanner um objeto File: Ou Scanner in = new Scanner(new File ("input.txt") ); File myfile = new File("input.txt"); Scanner in = new Scanner(myFile);

Leitura de arquivo (linhas ou palavras) Para ler uma linha de cada vez, usa-se um laço com hasnextline() para testar se há uma linha para ser lida e nextline() para ler a linha while (in.hasnextline()) { } String input = in.nextline(); System.out.println(input); Para ler uma palavra de cada vez, usa-se um laço com hasnext() para testar se há uma palavra para ser lida e next() para ler a palavra while (in.hasnext()) { } String input = in.next(); System.out.println(input);

Espaços em branco O método next() de Scanner precisa decidir onde inicia e onde termina uma palavra São usadas regras simples para isto: São consumidos todos os espaços em branco antes do primeiro caractere Então ele lê caracteres até encontrar um espaço em branco ou chegar até o final da entrada Espaços em branco podem ser: (espaço) \n (nova linha) \r (retorno do carro) \t (tabulação) \f (avanço de formulário)

Redefinindo o delimitador A classe Scanner tem um método para alterar o conjunto padrão de delimitadores usado para separar palavras O método usedelimiter() recebe uma string que lista todos os caracteres que podem ser usados como delimitadores Esta string pode conter uma expressão regular para especificar casos de forma mais completa Scanner in = new Scanner(...); in.usedelimiter("[^a-za-z]+"); [ˆA-Za-z]+ diz que qualquer conjunto ([]) de pelo menos um (+) caractere que não (ˆ) seja uma letra maiúscula (A-Z) ou minúscula (a-z) será usado como delimitador Expressões regulares são usadas em muitos outros contextos Pode-se obter maiores detalhes sobre expressões regulares

Leitura de caracteres Em Scanner não existem os métodos hasnextchar() e nextchar() Em vez disto, deve-se definir Scanner para usar um delimitador vazio Scanner in = new Scanner(...); in.usedelimiter(""); while (in.hasnext()) { char ch = in.next().charat(0); // Processa cada caractere } next() retorna uma string de um caractere Usa-se charat(0) para extrair o caractere no índice 0

Classificação de caracteres A classe Character provê diversos métodos úteis para classificar um caractere Passa-se para eles um char e eles retornam um boolean if ( Character.isDigit(ch) )... Método Exemplo de caracteres aceitos isdigit() 0,1,2,3 isletter() isuppercase() islowercase() iswhitespace() A,B,C,a,b,c, A,B,C a,b,c Espaço, nova linha, tabulação

Leitura de linhas Alguns arquivos de texto são usados como bancos de dados simples Cada linha contém um conjunto de pedaços de informação relacionados Por exemplo: China 1330044605 India 1147995898 United States 303824646 Neste exemplo, o fato de que há nomes de países formados por duas palavras, torna a leitura mais complicada Será melhor ler a linha inteira e processá-la usando os métodos da classe String nextline() lê a linha, eleminando o \n do final da linha while (in.hasnextline()) { String line = in.nextline();

Quebrando cada linha No exemplo dos países, cada linha tem que ser quebrada em 2 partes: nome do país e população Os caracteres antes do primeiro dígito fazem parte do nome do país Pode-se descobrir o índice do primeiro dígito com a ajuda de Character.isDigit(): int i = 0; while (!Character.isDigit(line.charAt(i))) { i++; }

Quebrando linha O método substring é usado para extrair as duas partes E trim() remove espaços em branco no início e no final da string String countryname = line.substring(0, i); String population = line.substring(i); // remove os espacos em branco no inicio e fim do nome do pais countryname = countryname.trim();

Formatando saída System.out.printf() disponibiliza muitas opções de formatação, permitindo: Alinhamento de strings e números Definição do tamanho de exibição de campos Alinhamento à esquerda (o padrâo é fazer o alinhamento à direita) System.out.printf("%-10s%10.2f", items[i] + ":", prices[i]); Por exemplo: %-10s faz o alinhamento à esquerda de um string completando-o com espaços até que 10 caracteres tenham sido impressos %10.2f imprime um valor decimal de ponto flutuante, alinhado à direita, com 10 caracteres no total, contando 2 casas decimais Resultado:

Formatando a saída A especificação de formato de printf() tem a seguinte estrutura: O primeiro caractere é um % A seguir, aparecem flags opcionais veja tabela a seguir Depois aparece o tamanho do campo: número total de caracteres (incluindo espaços para alinhamento), seguido da precisão para números de ponto flutuante (que é opcional) Por fim, aparece o tipo de formatação (por exemplo, f para valores em ponto flutuante ou s para strings)

Formatando a saída printf()

Formatando a saída printf()

Exercícios Crie um programa onde o usuário entra com uma lista de nomes e estes são salvos em um arquivo texto Crie um programa que faça a leitura o arquivo criado e enumere cada um dos nomes Crie um programa que faça a leitura do último arquivo criado e permita a criação de um novo arquivo, onde deve-se inseria a idade, o peso e a altura de cada elemento da lista

Exercícios Faça um programa em Java que gere uma versão criptografada de um arquivo texto trocando cada caractere de código ASCII j pelo caractere de código ASCII j+k, onde k é um parâmetro especificado pelo usuário. Fique atento para não gerar códigos ASCII fora da faixa permitida. Faça um programa Java que leia um arquivo texto chamado entrada.txt e imprima, em outro arquivo texto, denominado saida.txt, o total de letras, vogais, consoantes, espaços em branco, palavras e o total de linhas encontradas no

Exercícios Considere dois arquivos, itens1.dat e itens2.dat, contendo registros sobre itens de estoque de um supermercado. Cada registro contém o nome do produto, preço, marca e data de validade. Em ambos os arquivos os registros estão ordenados pelo nome do produto. Escreva um programa que leia os dois arquivos e gere um terceiro formado pela combinação dos dois anteriores de modo que os registros continuem ordenados pela chave nome. Os arquivos não devem ser lidos para a memória.

Exercícios Escreva um programa que receba dois arquivos textos e determine se existe pelo menos uma mesma sequência de palavras de tamanho maior ou igual a cinco (5) em ambos os arquivos.