Trabalhando com o sistema de arquivos em Kotlin: da teoria à prática
\n\nTrabalhar com o sistema de arquivos é uma das tarefas básicas que todo desenvolvedor enfrenta. Em Kotlin, graças à sua estreita integração com Java e suas próprias extensões convenientes, o gerenciamento de arquivos e diretórios se torna intuitivo e conciso. Neste artigo, abordaremos as operações principais: criação, leitura, escrita e exclusão de arquivos, bem como o trabalho com diretórios. Todos os exemplos são escritos em Kotlin e estão prontos para uso em seus projetos.
\n\nFundamentos: configuração e primeiros passos
\n\nKotlin não possui sua própria biblioteca separada para trabalhar com o sistema de arquivos — ele utiliza totalmente o poder de java.io.File, adicionando a ele várias funções de extensão. Isso significa que você pode usar os métodos Java familiares, mas com uma sintaxe mais curta e segura.
import java.io.File\n\nfun main() {\n val file = File("example.txt")\n println(file.exists()) // false, se o arquivo não existir\n}\n\nA classe principal é java.io.File. Ela representa uma abstração de um caminho para um arquivo ou diretório, que não necessariamente existe no disco.
Leitura e escrita de arquivos em Kotlin
\n\nKotlin oferece maneiras elegantes de ler e escrever, que eliminam a necessidade de gerenciar manualmente fluxos e fechar recursos.
\n\nLendo todo o conteúdo de um arquivo
\n\nA maneira mais simples é usar a função readText(). Ela lê o arquivo inteiro em uma única string.
fun readEntireFile() {\n val file = File("data.txt")\n if (file.exists()) {\n val content: String = file.readText()\n println(content)\n } else {\n println("Arquivo não encontrado")\n }\n}\n\nSe o arquivo for grande, é melhor ler linha por linha:
\n\nfun readLines() {\n File("log.txt").useLines { lines ->\n lines.forEach { line ->\n println(line)\n }\n }\n // useLines fechará o fluxo automaticamente\n}\n\nEscrevendo em um arquivo
\n\nPara escrever, use writeText() (sobrescreve o arquivo) ou appendText() (adiciona ao final).
fun writeToFile() {\n val file = File("output.txt")\n file.writeText("Olá, Kotlin!\\n")\n file.appendText("Esta é a segunda linha.")\n \n println(file.readText())\n // Saída:\n // Olá, Kotlin!\n // Esta é a segunda linha.\n}\n\nPara dados mais complexos (por exemplo, escrever uma lista de strings), é conveniente usar writeLines():
fun writeListOfLines() {\n val lines = listOf("Linha 1", "Linha 2", "Linha 3")\n File("list.txt").writeLines(lines)\n}\n\nCriação, cópia e exclusão de arquivos e diretórios
\n\nGerenciar a estrutura de arquivos é outra tarefa comum. Vamos considerar as operações principais.
\n\nCriação de arquivos e pastas
\n\nO método createNewFile() cria um novo arquivo vazio, se ele ainda não existir. Para criar diretórios, use mkdir() (cria apenas a última pasta no caminho) ou mkdirs() (cria todos os diretórios pai ausentes).
fun createStructure() {\n val dir = File("my_project/src/main")\n if (dir.mkdirs()) {\n println("Diretório criado: ${dir.absolutePath}")\n }\n \n val newFile = File(dir, "config.ini")\n if (newFile.createNewFile()) {\n println("Arquivo criado: ${newFile.name}")\n }\n}\n\nCópia e movimentação
\n\nEm Kotlin, não existe uma função embutida copyTo? Na verdade, existe! O método copyTo() permite copiar arquivos facilmente, e renameTo() permite renomear ou mover.
fun copyAndMove() {\n val source = File("source.txt")\n val destination = File("backup/source_copy.txt")\n \n // Cópia\n source.copyTo(destination, overwrite = true)\n \n // Mov