Introdução
Trabalhar com o sistema de arquivos é uma das tarefas básicas em qualquer linguagem de programação. Em Kotlin, graças à sua sintaxe concisa e às poderosas extensões da biblioteca padrão Java, realizar operações com arquivos e diretórios torna-se simples e intuitivo.
Neste artigo, vamos abordar na prática as principais operações: criação, leitura, escrita, cópia, movimentação e exclusão de arquivos e pastas. Todos os exemplos são escritos em Kotlin e estão prontos para uso em seus projetos. O material será útil tanto para iniciantes quanto para desenvolvedores experientes que desejam atualizar seus conhecimentos ou encontrar soluções ideais para tarefas do dia a dia.
Principais classes e imports
Para trabalhar com o sistema de arquivos em Kotlin, são utilizadas classes dos pacotes java.io (por exemplo, File) e java.nio.file (por exemplo, Path, Files). As recomendações modernas preferem java.nio.file, pois esta API é mais performática e conveniente.
Para todos os exemplos, precisaremos dos seguintes imports:
import java.io.Fileimport java.nio.file.Pathimport java.nio.file.Pathsimport java.nio.file.Filesimport java.nio.file.StandardCopyOptionimport java.nio.file.StandardOpenOptionCriação de arquivo e diretório
Vamos começar com o mais simples — a criação de um novo arquivo e pasta.
// Criação de diretórioval dir = File("my_directory")if (!dir.exists()) { dir.mkdirs() // mkdirs() cria todos os diretórios pai ausentes println("Diretório criado: ${dir.absolutePath}")}
// Criação de arquivoval file = File(dir, "example.txt")if (!file.exists()) { file.createNewFile() println("Arquivo criado: ${file.absolutePath}")}Observe: mkdirs() cria toda a cadeia de diretórios, se ela não existir. mkdir() cria apenas o último diretório e retornará false se a pasta pai estiver ausente.
Leitura e escrita de arquivos
Estas são as operações mais comuns. Kotlin oferece várias maneiras elegantes para trabalhar com o conteúdo dos arquivos.
Escrita em arquivo
val path = Paths.get("my_directory/write_example.txt")
// String para escreverval content = "Olá, mundo! Esta string foi escrita no arquivo.Segunda linha."
// Escrita simples de string (sobrescreve o arquivo)Files.writeString(path, content)
// Escrita de lista de stringsval lines = listOf("Linha 1", "Linha 2", "Linha 3")Files.write(path, lines)
// Anexar ao final do arquivoval additionalContent = "Linha adicional."Files.writeString(path, additionalContent, StandardOpenOption.APPEND)O método Files.writeString() foi introduzido no Java 11 e está disponível no Kotlin/JVM. Se você precisar de suporte para versões mais antigas, use Files.write() especificando a codificação.
Leitura de arquivo
val path = Paths.get("my_directory/write_example.txt")
// Leitura de todo o conteúdo em uma stringval fullContent = Files.readString(path)println("Conteúdo do arquivo:$fullContent")
// Leitura em uma lista de stringsval allLines: List<String> = Files.readAllLines(path)allLines.forEachIndexed { index, line -> println("Linha ${index + 1}: $line")}
// Leitura usando Stream (para arquivos grandes)Files.lines(path).use { stream -> stream.forEach { line -> println("Processando linha: $line") }}A construção .use { ... } garante o fechamento do fluxo após o processamento, o que é especialmente importante ao trabalhar com arquivos grandes.
Cópia, movimentação e renomeação
Essas operações também são implementadas através de java.nio.file.Files.
Cópia de arquivo
val source = Paths.get("my_directory/example.txt")val destination = Paths.get("my_directory/backup/example_copy.txt")