CodeGym /Cursos /JAVA 25 SELF /Introdução a arquivos e imagens

Introdução a arquivos e imagens

JAVA 25 SELF
Nível 12 , Lição 3
Disponível

1. Introdução

Em programação, quase sempre é preciso trabalhar com arquivos. Os exemplos são conhecidos por todos: salvar o texto de uma anotação, o progresso de um jogo, copiar uma imagem ou ler configurações de um arquivo de configuração.

No Java, há ferramentas modernas e convenientes para isso: Path e Files do pacote java.nio.file. Elas permitem, em poucas linhas de código, abrir um arquivo, ler seu conteúdo, gravar texto ou até copiar uma imagem.

Caminho para o arquivo (Path)

Um arquivo sempre está em algum lugar no disco e, para acessá-lo, é preciso indicar o caminho. Para isso, no Java existe a classe Path, e é possível criar um novo objeto com o método Path.of().

Path path = Path.of("hello.txt"); // caminho relativo
Path absPath = Path.of("C:/Users/Me/image.png"); // caminho absoluto (Windows)

Explicação:

  • O caminho relativo procura o arquivo na pasta atual do projeto (por exemplo, "hello.txt").
  • O caminho absoluto indica o endereço completo: unidade, pastas e nome do arquivo.

2. Trabalhando com arquivos de texto

Do ponto de vista do Java, todos os arquivos se dividem em 2 tipos — de texto e binários. Se o conteúdo pode ser representado como texto compreensível para uma pessoa, é um arquivo de texto. Em todos os outros casos, é apenas um conjunto de bytes (arquivo binário).

Gravar texto em arquivo — writeString

Para gravar uma string em um arquivo, usamos o método writeString.

Path p = Path.of("hello.txt");
Files.writeString(p, "Olá, arquivo!");

O que aconteceu aqui:

  1. criamos um objeto Path que aponta para "hello.txt";
  2. gravamos a string nele com o método writeString;
  3. se o arquivo não existir, ele será criado automaticamente.

Assim, é fácil salvar anotações ou mensagens em um arquivo de texto.

Ler texto de um arquivo — readString

O método readString permite carregar o arquivo inteiro diretamente para uma string.

Path p = Path.of("hello.txt");
String content = Files.readString(p);
System.out.println(content);

Agora, a variável content contém o conteúdo do arquivo. Isso é conveniente para arquivos pequenos: arquivos de configuração, textos e documentos JSON.

3. Trabalhando com arquivos binários

Nem todos os arquivos são de texto. Imagens, músicas, arquivos compactados — são conjuntos de bytes. Para trabalhar com eles, existem os métodos write e readAllBytes.

Gravar bytes em arquivo — write

O método write() permite gravar em um arquivo um array de bytes. Ele também é chamado de buffer (byte buffer).

byte[] data = {65, 66, 67, 68}; // caracteres A B C D
Files.write(Path.of("letters.bin"), data);

Aqui gravamos no arquivo um array de bytes. Se você abrir o arquivo como texto, dentro estarão as letras "ABCD".

Ler bytes — readAllBytes

Para obter de volta o conteúdo do arquivo como um array de bytes, usamos o método readAllBytes.

byte[] buffer = Files.readAllBytes(Path.of("letters.bin"));

// imprime no console o array de bytes lido
for (byte b : buffer) 
{
    System.out.print((char)b + " ");
}

Saída:

A B C D

Esse método é usado para trabalhar com quaisquer arquivos binários — imagens, documentos, músicas.

4. Cenários populares de trabalho com arquivos

O cenário mais comum de trabalho com arquivos é, provavelmente, copiar um arquivo.

Copiando arquivos

Para copiar um arquivo, você pode simplesmente lê-lo em um array de bytes e gravá-lo em outro arquivo.

Path in = Path.of("logo.png");
Path out = Path.of("logo_copy.png");

byte[] bytes = Files.readAllBytes(in);
Files.write(out, bytes);

Dessa forma, é possível copiar imagens, documentos e quaisquer outros arquivos, sem se preocupar com o formato.

Verificando existência e tamanho

Às vezes é preciso garantir que o arquivo existe e descobrir seu tamanho. Para isso, há os métodos exists e size.

Path p = Path.of("hello.txt");
if (Files.exists(p)) 
{
    long size = Files.size(p);
    System.out.println("Arquivo encontrado, tamanho: " + size + " bytes");
} 
else 
{
    System.out.println("Arquivo não encontrado!");
}

Isso é útil para diagnóstico: você saberá exatamente se está trabalhando com o arquivo correto.

5. Exceções

O trabalho com arquivos pode terminar com erro: o arquivo não existe, não há permissões de acesso, o disco está cheio ou o arquivo está em uso por outro programa. Portanto, é preciso envolver o trabalho com o disco em try-catch, ou propagar as exceções para fora usando throws.

try 
{
    String content = Files.readString(Path.of("hello.txt"));
    System.out.println(content);
} 
catch (IOException e) 
{
    System.out.println("Erro ao ler: " + e.getMessage());
}

Assim, o programa não vai “travar”, mas informará educadamente ao usuário o que aconteceu. Se necessário, é possível propagar a exceção IOException mais adiante na pilha a partir do método usando a palavra‑chave throws.

1
Tarefa
JAVA 25 SELF, nível 12, lição 3
Bloqueado
Gravar uma linha em um arquivo de texto
Gravar uma linha em um arquivo de texto
1
Tarefa
JAVA 25 SELF, nível 12, lição 3
Bloqueado
Lendo texto de um arquivo e exibindo na tela
Lendo texto de um arquivo e exibindo na tela
1
Tarefa
JAVA 25 SELF, nível 12, lição 3
Bloqueado
Gravação e leitura de dados binários
Gravação e leitura de dados binários
1
Tarefa
JAVA 25 SELF, nível 12, lição 3
Bloqueado
Cópia de arquivo
Cópia de arquivo
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION