O documento discute entrada e saída (I/O) em Java, explicando como armazenar dados persistentemente em arquivos através da classe File e realizar operações de leitura e escrita utilizando fluxos (InputStream e OutputStream) e suas subclasses. Também aborda a importância de fechar recursos após uso para evitar problemas.
2. Persistência
● Até então falamos muito de memória
● Basicamente sobre a memória RAM, que é volátil
● Tudo pode ser facilmente perdido se o programa parar de
executar
● Para evitar a perda de informação devemos armazena-la ou
persisti-la
3. Arquivo
● Classe File representa um arquivo do HDD
● Contém vários métodos relacionados a arquivos. Ex:
createNewFile()
delete()
getAbsolutePath()
list()
mkdirs()
4. I/O
● Ler e escrever bytes, caracteres e Strings de/para a entrada
e saída padrão
● Ler e escrever bytes, caracteres e Strings de/para arquivos
● Utilizar buffers para agilizar a leitura e escrita através de
fluxos
5. OO em casos de I/O
● Assim como toda API do Java, ela também é orientada a
objetos, usa e abusa de conceitos da OO: classes
abstratas, interfaces e polimorfismo
● Utiliza fluxos de entrada (InputStream) e saida
(OutputStream), para operações com arquivos, sockets e
entrada e saida padrão (teclado e console)
● InputStream e OutputStream definem o comportamento dos
fluxos (input ou leitura de bytes e output ou escrita de bytes)
● Vantagem da abstração é tornar acoplavel (como um
cartucho) a opção de I/O
6. Inputs
● InputStream, InputStreamReader, BufferedReader
● InputStream (trata a leitura de bytes): possui diversas
subclasses, ex: ObjectInputStream, AudioInputStream,
ByteArrayInputStream.
● InputStreamReader (trata a leitura de caracteres):
subclasse de Reader, feita para tratar diretamente com
caracteres e suporta vários encodings.
● BufferedReader (trata leitura de Strings): outra subclasse de
Reader, que recebe um outro Reader como argumento no
seu construtor. Sua ideia é concatenar chars de maneira
mais transparente.
8. Outputs
● OutputStream, OutputStreamReader, BufferedWriter
● OutputStream (trata a escrita de bytes): possui diversas
subclasses, ex: ObjectOutputStream,
ByteArrayOutputStream.
● OutputStreamWriter (trata a escrita de caracteres):
subclasse de Writer, feita para tratar diretamente com
caracteres e suporta vários encodings.
● BufferedWriter (trata escrita de Strings): outra subclasse de
Writer, que recebe um outro Writer como argumento no seu
construtor. Sua ideia é concatenar chars de maneira mais
transparente.
10. Fechando Recursos
● Pera evitar problemas, é importante que um arquivo/recurso
seja fechado pelo proprio programador.
● Se um recurso não for fechado pelo programador, ele pode
deixar de ser referenciado e o GC, eventualmente, poderá
fecha-lo.
● É possivel que sem um “close” alguma mudanças não
sejam de fato efetivadas no arquivo, elas ficariam apenas
em memoria e o programa finalizaria antes de realizar a
modificação.
11. Facilitando a vida
● A Classe Scanner surgiu com o Java 5 e sua ideia é facilitar
a leitura de informação por um InputStream.
● PrintStream possui vários construtores, entre eles