Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação Arquivos Texto em Java Arquivos Texto • As aplicações não podem ser limitadas a armazenar seus dados apenas em memória principal (RAM). • Há uma exigência de que os dados sejam armazenados de forma mais permanente de forma que possam ser utilizados posteriormente. • Uma das formas de armazenamento (secundária) permanente é o arquivo. • Arquivo pode ser definido como um conjunto de dados que podem ser armazenados em memória secundária do sistema: disco rígido (HD), CDs, PenDrives, etc. Arquivo Texto Aplicação (programa) Memória Principal (RAM) Memória Secundária (HD) Dados.TXT Sistema Operacional Gerenciamento acesso a disco O pacote java.io • O Java disponibiliza em sua biblioteca um conjunto de classes destinadas às operações com arquivos. • O termo IO vem das palavras Input (entrada) e Output (saída). • A referência para tratar a entrada e saída é a memória utilizada pela aplicação:utilizada pela aplicação: � Input: entrada de dados da memória secundária (arquivo) para a memória principal(RAM) do programa (da aplicação) – leitura de dados do arquivo – operações de READ. � Output: saída de dados da memória principal (RAM) para a memória secundária (arquivo) – escrita de dados no arquivo – operações de WRITE. O pacote java.io • O Java como outras linguagens utiliza o conceito de streams, que podem ser vistos como canais através dos quais os dados são enviados ou buscados de fontes de dados (arquivo, por exemplo). • Para realizar as operações de escrita e leitura em arquivos precisaremos das streams para realizararquivos precisaremos das streams para realizar essas operações. • As classes que operam com streams permitem a manipulação de diversos formatos de dados. O pacote java.io • O conjunto de classes do pacote java.io divide-se em dois grupos básicos: � Para a entrada de dados (com base nas classes InputStream e Reader); � Para a saída de dados (com base nas classes OutputStream e Writer).OutputStream e Writer). • Tecnicamente podemos ter outra divisão: � Uma engloba as streams baseadas em caracteres (Reader e Writer) � Outra engloba as streams orientadas a bytes (InputStream e OutputStream) Entrada de Dados • Para a leitura de dados de arquivos local, utilizamos a classe FileInputStream cujos construtores recebem um objeto classe String, File ou FileDescriptor contendo informações sobre o arquivo a ser aberto. • Para leitura eficiente de arquivos comuns utilizamos a classe BufferedReader em associação com a classe FileReader, evitando ler o dado um a um, permitindo aFileReader, evitando ler o dado um a um, permitindo a leitura de uma quantidade maior de dados. • A entrada de dados compreende as operações de: � Abrir o arquivo � Ler dados do arquivo � Fechar o arquivo Saida de Dados • Como nas classes de entrada de dados, temos classes especializadas para a saída de dados. As operações de saída de dados são realizadas por classes que derivam de OutputStream e Writer. • A classe FileWriter é utilizada para operações de saida, ou seja, de escrita de dados da memória RAMsaida, ou seja, de escrita de dados da memória RAM para dentro de um arquivo em disco. A classe FileWriter • A classe FileWriter é utilizada para a escrita em arquivos. • Entre outros, a classe disponibiliza os seguintes construtores para instanciação de um objeto da classe FileWriter: � FileWriter (String) FileWriter (String, boolean)� FileWriter (String, boolean) • A saida de dados compreende as operações de: � Criar (caso não exista) � Abrir o arquivo � Escrever dados no arquivo � Fechar o arquivo FileWriter • Instanciação de objeto da classe FileWriter: � No exemplo abaixo na criação do objeto arq, é chamado o construtor da classe que recebe o nome do arquivo a ser criado/aberto. FileWriter arq = new FileWriter(“Dados.TXT”); � A instanciação do objeto arq, aciona a criação do arquivo Dados.TXT na pasta em que a aplicação está executando. � Se o arquivo Dados.TXT existir ele será recriado e os dados serão destruídos. FileWriter • Instanciação de objeto da classe FileWriter: � No exemplo abaixo na criação do objeto arq1, é chamado outro construtor da classe que recebe o nome do arquivo a ser criado/aberto e um parâmetro boolean. FileWriter arq1 = new FileWriter(“Dados.TXT”,true); � Se o arquivo Dados.TXT existir ele será mantido e os dados serão preservados. FileWriter • Escrita em arquivos e fechamento de arquivos com a classe FileWriter: � Para escrever num arquivo deverá ser utilizado um dos métodos write disponibilizados na estrutura da classe. � write (int n) – este método permite escrever um dado do tipo int no arquivo. O dado é salvo no seudado do tipo int no arquivo. O dado é salvo no seu formato binário e se visualizado através de um editor de texto, será visualizado com base nos caracteres da tabela ASCII. � write(String s) – este método permitir escrever um cadeia de caracteres no arquivo. � close() – este método é utilizado para fechar o arquivo e atualizar as informações gravadas. FileWriter – exemplo1 import java.io.*; public class Principal { public static void main(String[] args) { String nome = "jose"; try { FileWriter arq = new FileWriter("C:\\Dados.TXT“,true); arq.write(nome+”/r/n”); arq.close(); } catch (Exception e) { System.out.println("Erro:" + e.getMessage()); } } } FileWriter Principal.class jose • Em que consiste escrever um dado no arquivo? nome arq.write(nome); Memória Principal RAM 1 2 Dados.TXT Sistema Operacional Gerenciamento acesso a disco Memória Secundária (HD) arq.write(nome); jose A execução do método write (1) faz uma cópia do conteúdo da variável nome (2) da memória principal escrevendo-o dentro do arquivo.(3) 1 3 FileWriter – exemplo1 • Exemplos: (write) String nome = “jose”; String email = “jj@com”; int idade = 30; • Utilizando o objeto arq definido em slide anterior: arq.write(nome);arq.write(nome); arq.write(nome+email); arq.write(nome+”;”+email); arq.write(nome + idade); (a conversão do int para String é implícita) arq.write(nome +”;”+idade); A classe FileReader • A classe FileReader é utilizada para a leitura de arquivos. • Entre outros, a classe disponibiliza o seguinte construtor para instanciação de um objeto da classe FileReader: � FileReader (String) • A leitura de dados compreende as operações de: � Abrir o arquivo � Ler dados no arquivo (uma linha ou todas linhas até o final do arquivo) � Fechar o arquivo FileReader • Instanciação de objeto da classe FileReader: � No exemplo abaixo na criação do objeto arq, é chamado o construtor da classe que recebe o nome do arquivo a ser aberto. FileReader arq = new FileReader(“C:\\Dados.TXT”); � A instanciação do objeto arq, aciona a abertura do arquivo Dados.TXT na pasta C:\. � Se o arquivo Dados.TXT existir ele será aberto, senão será gerada uma exceção. FileReader • Leitura de arquivos com a classe FileReader: � A leitura consiste na cópia de um byte ou de um bloco de dados do arquivo em disco para memória principal do programa. � Para ler dados de um arquivo deverá ser utilizado um dos métodos read disponibilizados (implementados) nados métodos read disponibilizados (implementados) na estrutura da classe. � read () – este método ler um byte do arquivo e retorna o valor int decimal correspondente ao valor do byte lido na tabela de caracteres ASCII. FileReader arq = new FileReader(“C:\\Dados.TXT”); int ch = arq.read(); FileReader • Leitura de arquivos com a classe FileReader: � A leitura consiste na cópia de um byte ou de um bloco de dados do arquivo em disco paramemória principal do programa. � Para ler dados de um arquivo deverá ser utilizado um dos métodos read disponibilizados (implementados) nados métodos read disponibilizados (implementados) na estrutura da classe. � read () – este método ler um byte do arquivo e retorna o valor int decimal correspondente ao valor do byte lido na tabela de caracteres ASCII. � Há outros métodos read com outras assinaturas para a leitura de blocos de dados. • Exemplo: � Imagine que o arquivo DADOS.TXT tem o seguinte conteúdo FileReader arq = new FileReader(“C:\\Dados.TXT”); FileReader 20081010;Joseph Markson;jm@site.com.au 20081010;Elizabeth Hurtley;eh@site.com.fi FileReader arq = new FileReader(“C:\\Dados.TXT”); int ch = arq.read(); System.out.println(ch); � A leitura do arquivo, irá ler apenas o primeiro byte do arquivo, o caracter ‘2’. � O valor retornado e armazenado na variável ch será 50. Este é o valor do caracter 2 na tabela de caracteres ASCII. • Exemplo: � Uma próxima leitura irá ler o segundo caracter do arquivo FileReader arq = new FileReader(“C:\\Dados.TXT”); FileReader 20081010;Joseph Markson;jm@site.com.au 20081010;Elizabeth Hurtley;eh@site.com.fi FileReader arq = new FileReader(“C:\\Dados.TXT”); int ch = arq.read();//primeira leitura System.out.println(ch); ch = arq.read();//segunda leitura System.out.println(ch); � Na segunda leitura, o valor retornado e armazenado na variável ch será 48. Este é o valor do caracter 0 na tabela de caracteres ASCII. A classe BufferedReader • Suponha que ao invés de ler o arquivo de texto por caracteres fosse desejado ler uma linha do arquivo de cada vez. • Para tanto, é necessário ler os caracteres um a um e agregá-los em um buffer (área de memória) até encontrar o caráter de fim de linha. Então esse conjuntoencontrar o caráter de fim de linha. Então esse conjunto de caracteres pode ser transformado em uma string e retornada como resultado desse método. • Esse tipo de funcionalidade adicional é suportado através de objetos da classe BufferedReader. A classe BufferedReader • Um dos construtores para essa classe recebe como argumento um objeto Reader, ou seja, utilizando um objeto da classe FileReader. • O método readLine implementado na classe BufferedReader implementa a funcionalidade para leituras de linhas da fonte de dados (arquivo porleituras de linhas da fonte de dados (arquivo por exemplo), retornando um objeto String. A classe BufferedReader • Exemplo public static void main (String[] args){ try { FileReader fr = new FileReader("C:\\Dados.TXT"); BufferedReader arquivo = new BufferedReader(fr); //Ler a primeira linha do arquivo String ln = arquivo.readLine();String ln = arquivo.readLine(); System.out.println(ln); //ler a segunda linha do arquivo ln = arquivo.readLine(); System.out.println(ln); } catch (Exception e) { System.out.println("Erro:"+e.getMessage()); } } BufferedReader • Em que consiste ler uma linha do arquivo? Principal.class 200810;joselin String lin = arquivo.readLine(); Memória Principal RAM 3 Dados.TXT Sistema Operacional Gerenciamento acesso a disco Memória Secundária (HD)200810;jose 200920;maria A execução do readLine (1) faz a cópia (2) de uma linha do arquivo para a variável lin (3) na memória principal. 1 2 A classe BufferedReader • A cada linha lida do arquivo de dados, o método readLine retorna uma String contendo todos os dados da linha copiado do arquivo para a memória principal do programa. • Após a leitura da última linha, uma tentativa de nova leitura do arquivo, fará com que o método readLineleitura do arquivo, fará com que o método readLine retorne um null indicando que não há mais dados a ler.
Compartilhar