Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

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:

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:

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
1public void close() throws IOException — Fecha o stream, libera recursos.
2protected void finalize() throws IOException — Limpa a conexão com o arquivo.
3public int read(int r) throws IOException — Lê o byte especificado; retorna -1 no fim do arquivo.
4public int read(byte[] r) throws IOException — Lê r.length bytes em um array.
5public 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
1public void close() throws IOException — Fecha o stream.
2protected void finalize() throws IOException — Limpa conexão.
3public void write(int w) throws IOException — Escreve byte especificado.
4public 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

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

  1. Dominando Entrada e Saída (I/O) em C: scanf() e printf() Explicados
  2. Python File I/O: Dominando Operações de Arquivo, Leitura, Escrita e Gerenciamento
  3. Variáveis e Literais em Java: Guia Completo
  4. Dominando Entrada e Saída em Java: Imprimir, Ler e Formatados Seus Dados
  5. Classes e Objetos em Java: Guia Prático
  6. Classes e Métodos Abstratos em Java: Guia Completo
  7. Dominando Classes Aninhadas e Internas em Java: Tipos, Exemplos e Boas Práticas
  8. Java throw vs throws: Dominando Tratamento de Exceções com Exemplos Práticos
  9. Dominando Java Scanner: Guia Completo com Exemplos Práticos
  10. Dominando Autoboxing e Unboxing em Java: Exemplos Práticos e Boas Práticas