Swift中的文件操作:从打开到加密

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么Swift不仅仅是UI,还涉及文件操作



当开发者开始学习Swift时,他们最常编写的是带有界面、动画和网络请求的应用程序。但迟早会遇到这样的任务:在设备上保存数据、读取配置文件、解析JSON文件或只是复制文档。这时很多人会感到困惑。其实大可不必——Swift中的文件操作如此优雅且设计周到,以至于用过之后就不想再回到其他语言了。



在本文中,我们将从简单到复杂,逐步讲解Swift中的文件系统交互。您将学习如何创建、读取、写入和删除文件,操作目录,处理错误,甚至加密数据。让我们开始吧!



基础:FileManager和FileHandle



Swift文件系统的核心是FileManager类。这是一个“调度器”,它了解设备上关于文件夹和文件的一切。它可以检查文件是否存在、移动、复制和删除对象。要处理文件内容(读取和写入),可以使用FileHandle或更高级的方法,如Data、String和Codable。



文件存储在哪里?路径和目录



在编写代码之前,需要了解我们有权将数据保存在哪里。在iOS和macOS中有严格的规则:应用程序只能写入自己的沙盒(sandbox)。最常用的目录有:



  • Documents — 用于应在备份时保留的用户数据。
  • Library/Caches — 用于系统可能删除的临时文件。
  • tmp — 用于一次性文件,重启时会被删除。


获取所需文件夹的路径非常简单:



import Foundation

let fileManager = FileManager.defaultlet documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!print("Documents: \\(documentsURL.path)")

let cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first!print("Caches: \\(cachesURL.path)")


在Swift中创建和删除文件



我们从最基本的开始——在Documents目录中创建一个空文件:



let fileURL = documentsURL.appendingPathComponent("myFile.txt")

// 如果文件不存在则创建if !fileManager.fileExists(atPath: fileURL.path) { fileManager.createFile(atPath: fileURL.path, contents: nil, attributes: nil) print("文件已创建!")}


请注意:createFile(atPath:contents:attributes:)返回一个Bool值,指示文件是否成功创建。始终检查结果——这可以避免意外错误。



删除文件只需一行代码:



do {    try fileManager.removeItem(at: fileURL)    print("文件已删除")} catch {    print("删除错误:\\(error.localizedDescription)")}


这里我们使用try和do-catch块——这是Swift中处理错误的标准方法。切勿在不检查的情况下调用removeItem,否则应用程序会崩溃。



读取和写入文本文件



最常见的场景是处理文本数据。Swift提供了便捷的方法来读取Swift文件和通过字符串写入:



// 写入文本let text = "你好,世界!Hello, Swift!"do {    try text.write(to: fileURL, atomically: true, encoding: .utf8)    print("文本已写入")} catch {    print("写入错误:\\(error)")}

// 读取文本do { let savedText = try String(contentsOf: fileURL, encoding: .utf8) print("读取内容:\\(savedText)")} catch { print("读取错误:\\(error)")}


atomically: true标志确保写入是原子性的——数据首先写入

博客

书籍推荐