Trabalho com arquivos em Swift: da abertura à criptografia

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que Swift não é só sobre UI, mas também sobre arquivos

\n\n

Quando desenvolvedores começam a estudar Swift, na maioria das vezes escrevem aplicativos com interfaces, animações e requisições de rede. Mas, mais cedo ou mais tarde, surge a tarefa: salvar dados no dispositivo, ler um config, parsear um arquivo JSON ou simplesmente copiar um documento. E muitos se perdem aqui. Mas não deveriam — trabalhar com arquivos em Swift é tão elegante e bem pensado que depois disso não se quer voltar para outras linguagens.

\n\n

Neste artigo, vamos abordar a interação com o sistema de arquivos em Swift do simples ao complexo. Você aprenderá como criar, ler, escrever e excluir arquivos, trabalhar com diretórios, tratar erros e até criptografar dados. Vamos lá!

\n\n

Fundamentos: FileManager e FileHandle

\n\n

O coração do sistema de arquivos em Swift é a classe FileManager. É um "gerenciador" que sabe tudo sobre pastas e arquivos no dispositivo. Ele permite verificar existência, mover, copiar e excluir objetos. Para trabalhar com o conteúdo dos arquivos (leitura e escrita), usa-se FileHandle ou métodos de nível mais alto como Data, String e Codable.

\n\n

Onde armazenar arquivos? Caminhos e diretórios

\n\n

Antes de escrever código, é preciso entender onde temos permissão para salvar dados. No iOS e macOS, existem regras rigorosas: o aplicativo só pode escrever em sua própria sandbox (sandbox). Os diretórios mais populares são:

\n\n
    \n
  • Documents — para dados do usuário que devem ser preservados em backups.
  • \n
  • Library/Caches — para arquivos temporários que o sistema pode excluir.
  • \n
  • tmp — para arquivos descartáveis, excluídos na reinicialização.
  • \n
\n\n

Obter o caminho para a pasta desejada é muito simples:

\n\n
import Foundation\n\nlet fileManager = FileManager.default\nlet documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!\nprint("Documents: \\(documentsURL.path)")\n\nlet cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first!\nprint("Caches: \\(cachesURL.path)")
\n\n

Criação e exclusão de arquivos em Swift

\n\n

Vamos começar com o mais básico — criar um arquivo vazio no diretório Documents:

\n\n
let fileURL = documentsURL.appendingPathComponent("myFile.txt")\n\n// Cria o arquivo, se não existir\nif !fileManager.fileExists(atPath: fileURL.path) {\n    fileManager.createFile(atPath: fileURL.path, contents: nil, attributes: nil)\n    print("Arquivo criado!")\n}
\n\n

Observe: createFile(atPath:contents:attributes:) retorna um Bool que informa se o arquivo foi criado com sucesso. Sempre verifique o resultado — isso evitará erros inesperados.

\n\n

A exclusão de um arquivo é feita com uma linha:

\n\n
do {\n    try fileManager.removeItem(at: fileURL)\n    print("Arquivo excluído")\n} catch {\n    print("Erro ao excluir: \\(error.localizedDescription)")\n}
\n\n

Aqui usamos try e o bloco do-catch — abordagem padrão para tratamento de erros em Swift. Nunca chame removeItem sem verificação, caso contrário o aplicativo irá travar.

\n\n

Leitura e escrita de arquivos de texto

\n\n

O cenário mais comum é trabalhar com dados de texto. Swift oferece métodos convenientes para leitura de arquivo Swift e escrita através de strings:

\n\n
// Escrita de texto\nlet text = "Olá, mundo! Hello, Swift!"\ndo {\n    try text.write(to: fileURL, atomically: true, encoding: .utf8)\n    print("Texto escrito")\n} catch {\n    print("Erro ao escrever: \\(error)")\n}\n\n// Leitura de texto\ndo {\n    let savedText = try String(contentsOf: fileURL, encoding: .utf8)\n    print("Lido: \\(savedText)")\n} catch {\n    print("Erro ao ler: \\(error)")\n}
\n\n

A flag atomically: true garante que a escrita seja atômica — primeiro os dados são escri

Blogs

Book Recommendations