Trabalho com o sistema de arquivos em Java: guia prático
Trabalhar com o sistema de arquivos é uma das tarefas fundamentais na programação. Em Java, existe um conjunto poderoso e flexível de ferramentas para isso, desde o pacote clássico java.io até o moderno java.nio.file. Neste artigo, com exemplos práticos, veremos como criar, ler, escrever e excluir arquivos, além de trabalhar com diretórios.
1. Classe File: base do trabalho com arquivos
A classe java.io.File é a classe básica para representar o caminho para um arquivo ou diretório. Ela permite verificar a existência, criar, renomear e excluir objetos do sistema de arquivos.
Criação e verificação de existência de arquivo
import java.io.File;import java.io.IOException;
public class FileExample { public static void main(String[] args) { File file = new File("example.txt");
if (file.exists()) { System.out.println("Arquivo existe: " + file.getAbsolutePath()); } else { try { if (file.createNewFile()) { System.out.println("Arquivo criado: " + file.getName()); } } catch (IOException e) { System.err.println("Erro ao criar arquivo: " + e.getMessage()); } }
// Verificação de propriedades System.out.println("Legível: " + file.canRead()); System.out.println("Gravável: " + file.canWrite()); System.out.println("Tamanho: " + file.length() + " bytes"); }}Trabalho com diretórios
File dir = new File("my_directory");
if (dir.mkdir()) { System.out.println("Diretório criado");}
// Criação de diretórios aninhadosFile nestedDir = new File("parent/child/grandchild");if (nestedDir.mkdirs()) { System.out.println("Diretórios aninhados criados");}
// Obter lista de arquivosString[] files = dir.list();for (String fileName : files) { System.out.println(fileName);}2. Leitura e escrita de arquivos com FileReader/FileWriter
Para trabalhar com arquivos de texto, é conveniente usar as classes FileReader e FileWriter. Elas operam no nível de caracteres e suportam codificações.
Escrita em arquivo
import java.io.FileWriter;import java.io.IOException;
public class WriteExample { public static void main(String[] args) { try (FileWriter writer = new FileWriter("output.txt", true)) { writer.write("Olá, mundo!"); writer.write("Esta é a segunda linha."); writer.flush(); System.out.println("Dados gravados com sucesso"); } catch (IOException e) { System.err.println("Erro de escrita: " + e.getMessage()); } }}Observe: o segundo parâmetro true no construtor FileWriter ativa o modo de anexação (append). Se for omitido, o arquivo será sobrescrito.
Leitura de arquivo
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;
public class ReadExample { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new FileReader("output.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { System.err.println("Erro de leitura: " + e.getMessage()); } }}O uso de BufferedReader acelera significativamente a leitura de arquivos grandes devido ao buffer.
3. Abordagem moderna: java.nio.file (NIO.2)
A partir do Java 7, surgiu o pacote java.nio.file, que oferece ferramentas mais convenientes e performáticas para