Java, Usando Arquivos (Files): Introdução

Até o momento, em nosso curso, armazenamos dados em variáveis e arrays. Porém estes são temporários e se perdem ao término de cada aplicação.
Agora veremos como armazenar e ler dados, que podem ficar permanentemente em dispositivos de armazenamento, como seu HD.



O Java vê os arquivos de uma maneira diferente de como vemos. Ele vê um arquivo como uma série de dados em forma de bytes, alinhados, onde, ao final de cada arquivo, existe uma marca de fim de arquivo - end-of-file ou EOF, ou termina por conta de uma exceção ou tem, previamente, a informação do tamanho do arquivo. Todas estas informações de end-of-file são providas pelo sistema.

Essa sequência de arquivos existem em duas maneiras: como bytes(formato binário) ou como caracteres.
A forma binária pura, é lido por arquivos e realmente representa o número, é mais usada pelo computador em sua interpretação.
Na forma de caractere, o número é armazenado na forma binária, mas na representação Unicode do seu caractere. É a forma de armazenamento de textos e strings.

A abertura de um arquivo pelo Java se dá através da criação de um - adivinha - objeto.
Usaremos a package io:
java.io

Que tem alguns métodos de entrada, saída e de erro para arquivos, como:
FileReader -> recebe (input) dados de um arquivo, na forma de caractere
FileWriter -> escreve (output) dados em um arquivo, na forma de caractere

FileInputStream -> recebe (input) dados de um arquivo, na forma de byte
FileOutpuStream -> escreve (output) dados para um arquivo, na forma de byte

Ao longo do curso, desde o princípio até agora, sempre usamos uma entrada, a classe Scanner. Usamos ela pra receber dados do teclado, ela faz parte da 'io'. Há ainda outra classe nesse mesmo padrão, bem útil e não muito utilizada, que é a Formatter, que nos permite formatar as saídas, assim como nós fazemos com a printf. Note que ela é da System.out.printf, ou seja, ao contrário da Scanner, é de saída.
Usamos bastante entrada e saída, em qualquer linguagem de programação, e muitas vezes nem nos damos conta. Exploraremos isso de uma maneira mais explícita, nesse caso, faremos de uma maneira diferente, que é usando a Scanner, mas não vamos usar a entrada padrão (teclado / keyboard) e sim arquivos (files!).

Embora o Java trate os dados de uma maneira mais computacional (byte) ou humana (caractere), eles faz as conversões necessárias, de modo que não tenhamos que nos preocupar com o que ocorre no metal e no silício.
Mesmo assim, se você quiser escovar uns bits e usar a FileInputStream e a FileOutputStream, você pode usar as classes ObjectInputStream e a ObjectOutputStream para facilitar seu entendimento e tratamento de dados.

Há muita informação interessante nisso.
Caso se interesse, não deixe de olhar a documentação do io package e sua árvore de pacotes:
http://docs.oracle.com/javase/7/docs/api/java/io/package-tree.html

PS: note que eu cito muito a documentação.
Não é que ela seja boa, é que ela é a MELHOR fonte de consulta ! Ela tem simplesmente tudo!
Pode estudar por quantos livros, artigos, apostilas, tutoriais ou resumos quiser na internet. Mas nada vai se igualar a documentação.
Baixe-a, Tenha-a sempre em mãos!

Nenhum comentário:

Veja também: