Dominando Java I/O: Arquivos, Streams e Fundamentos de Entrada/Saída
O pacote java.io contém praticamente todas as classes necessárias para realizar entrada e saída (I/O) em Java. Todos esses streams representam uma fonte de entrada e um destino de saída. Os streams no java.io suportam muitos tipos de dados: primitivos, objetos, caracteres localizados, etc.
O que é um Stream?
Um stream pode ser definido como uma sequência de dados. Existem dois tipos principais:
- InputStream — Usado para ler dados de uma fonte.
- OutputStream — Usado para escrever dados em um destino.
O Java fornece suporte forte e flexível para I/O relacionado a arquivos e redes, mas este tutorial cobre a funcionalidade básica. Veremos os exemplos mais comuns.
Byte Streams
Streams de byte realizam I/O de bytes de 8 bits. As classes mais usadas são FileInputStream e FileOutputStream. Exemplo copiando um arquivo:
import java.io.*;
public class CopyFile {
public static void main(String args[]) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("input.txt");
out = new FileOutputStream("output.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) in.close();
if (out != null) out.close();
}
}
}
Arquivo input.txt:
This is test for copy file.
Compile e execute:
$ javac CopyFile.java
$ java CopyFile
Character Streams
Streams de caractere realizam I/O para unicode de 16 bits. Classes principais: FileReader e FileWriter. Internamente, FileReader usa FileInputStream e FileWriter usa FileOutputStream, mas lê/escreve dois bytes por vez.
import java.io.*;
public class CopyFile {
public static void main(String args[]) throws IOException {
FileReader in = null;
FileWriter out = null;
try {
in = new FileReader("input.txt");
out = new FileWriter("output.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) in.close();
if (out != null) out.close();
}
}
}
Standard Streams
Todas as linguagens fornecem suporte para I/O padrão: entrada do teclado, saída na tela. Java fornece três streams padrão:
- Standard Input —
System.in(teclado). - Standard Output —
System.out(tela). - Standard Error —
System.err(tela, para erros).
Exemplo: Lendo do Console
import java.io.*;
public class ReadConsole {
public static void main(String args[]) throws IOException {
InputStreamReader cin = null;
try {
cin = new InputStreamReader(System.in);
System.out.println("Digite caracteres, 'q' para sair.");
char c;
do {
c = (char) cin.read();
System.out.print(c);
} while (c != 'q');
} finally {
if (cin != null) cin.close();
}
}
}
Leitura e Escrita de Arquivos
As classes importantes são FileInputStream e FileOutputStream.
FileInputStream
Usado para ler dados de arquivos. Construtores principais:
InputStream f = new FileInputStream("C:/java/hello");
File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);
Métodos auxiliares principais:
| Nº | Método e Descrição |
|---|---|
| 1 | public void close() throws IOException — Fecha o stream, libera recursos. |
| 2 | protected void finalize() throws IOException — Limpa a conexão com o arquivo. |
| 3 | public int read(int r) throws IOException — Lê o byte especificado; retorna -1 no fim do arquivo. |
| 4 | public int read(byte[] r) throws IOException — Lê r.length bytes em um array. |
| 5 | public int available() throws IOException — Retorna bytes disponíveis para leitura. |
FileOutputStream
Cria arquivo e escreve dados. Construtores:
OutputStream f = new FileOutputStream("C:/java/hello");
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
Métodos principais:
| Nº | Método e Descrição |
|---|---|
| 1 | public void close() throws IOException — Fecha o stream. |
| 2 | protected void finalize() throws IOException — Limpa conexão. |
| 3 | public void write(int w) throws IOException — Escreve byte especificado. |
| 4 | public void write(byte[] w) — Escreve w.length bytes do array. |
Exemplo: InputStream e OutputStream
import java.io.*;
public class FileStreamTest {
public static void main(String args[]) {
try {
byte bWrite[] = {11, 21, 3, 40, 5};
OutputStream os = new FileOutputStream("test.txt");
for (int x = 0; x < bWrite.length; x++) {
os.write(bWrite[x]);
}
os.close();
InputStream is = new FileInputStream("test.txt");
int size = is.available();
for (int i = 0; i < size; i++) {
System.out.print((char) is.read() + " ");
}
is.close();
} catch (IOException e) {
System.out.print("Exceção");
}
}
}
Navegação de Arquivos e I/O
Classes importantes: File, FileReader, FileWriter.
Diretórios em Java
Um diretório é um File que pode conter lista de outros arquivos e diretórios. Use objeto File para criar diretórios e listar arquivos.
Criando Diretórios
mkdir()— Cria um diretório; retorna true se sucesso.mkdirs()— Cria o diretório e todos os pais necessários.
Exemplo
import java.io.File;
public class CreateDir {
public static void main(String args[]) {
String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
d.mkdirs();
}
}
Nota: Java cuida automaticamente de separadores de caminho no UNIX e Windows.
Listando Diretórios
Use list() do objeto File:
import java.io.File;
public class ReadDir {
public static void main(String[] args) {
File file = null;
String[] paths;
try {
file = new File("/tmp");
paths = file.list();
for (String path : paths) {
System.out.println(path);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Saída (exemplo):
test1.txt
test2.txt
ReadDir.java
ReadDir.class
Java
- Dominando Entrada e Saída (I/O) em C: scanf() e printf() Explicados
- Python File I/O: Dominando Operações de Arquivo, Leitura, Escrita e Gerenciamento
- Variáveis e Literais em Java: Guia Completo
- Dominando Entrada e Saída em Java: Imprimir, Ler e Formatados Seus Dados
- Classes e Objetos em Java: Guia Prático
- Classes e Métodos Abstratos em Java: Guia Completo
- Dominando Classes Aninhadas e Internas em Java: Tipos, Exemplos e Boas Práticas
- Java throw vs throws: Dominando Tratamento de Exceções com Exemplos Práticos
- Dominando Java Scanner: Guia Completo com Exemplos Práticos
- Dominando Autoboxing e Unboxing em Java: Exemplos Práticos e Boas Práticas