Trabalho com o sistema de arquivos em Java: do básico às técnicas avançadas
Trabalhar com o sistema de arquivos é uma das tarefas fundamentais na programação. Java fornece aos desenvolvedores ferramentas poderosas e flexíveis para gerenciar arquivos e diretórios. Neste artigo, vamos detalhar como trabalhar com o sistema de arquivos em Java, usando tanto o pacote clássico java.io quanto o moderno java.nio.file. Você aprenderá a criar, ler, escrever arquivos, gerenciar diretórios e tratar exceções.
Fundamentos do trabalho com arquivos em Java: classe File
A classe java.io.File é a pedra angular do trabalho com o sistema de arquivos em Java. Ela representa uma abstração do caminho para um arquivo ou diretório. É importante entender que File não armazena o conteúdo do arquivo, apenas fornece métodos para verificar propriedades e executar operações.
Vamos considerar as operações básicas com File:
import java.io.File;import java.io.IOException;
public class FileExample { public static void main(String[] args) { // Criando um objeto File File file = new File("example.txt"); File directory = new File("myDirectory");
// Verificando existência System.out.println("Arquivo existe: " + file.exists()); System.out.println("Pasta existe: " + directory.exists());
// Criando um novo arquivo try { if (file.createNewFile()) { System.out.println("Arquivo criado: " + file.getName()); } else { System.out.println("Arquivo já existe"); } } catch (IOException e) { System.err.println("Erro ao criar arquivo: " + e.getMessage()); }
// Criando um diretório if (directory.mkdir()) { System.out.println("Pasta criada: " + directory.getName()); }
// Obtendo informações do arquivo System.out.println("Caminho absoluto: " + file.getAbsolutePath()); System.out.println("Tamanho do arquivo: " + file.length() + " bytes"); System.out.println("Legível: " + file.canRead()); System.out.println("Gravável: " + file.canWrite());
// Deletando o arquivo if (file.delete()) { System.out.println("Arquivo deletado"); } }}A classe File também permite trabalhar com listas de arquivos em um diretório:
File currentDir = new File(".");String[] contents = currentDir.list();for (String item : contents) { System.out.println(item);}Leitura e escrita de arquivos: streams de entrada e saída
Para trabalhar diretamente com o conteúdo dos arquivos, Java usa streams de entrada e saída (I/O streams). As principais classes para trabalhar com arquivos de texto são FileReader/FileWriter e BufferedReader/BufferedWriter.
Lendo um arquivo linha por linha
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;
public class ReadFileExample { public static void main(String[] args) { String fileName = "input.txt"; try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { System.err.println("Erro ao ler arquivo: " + e.getMessage()); } }}Observe a construção try-with-resources. Ela fecha automaticamente o stream, prevenindo vazamento de recursos.
Escrevendo em um arquivo
import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;
public class WriteFileExample { public static void main(String[] args) { String fil