iOS开发 文件处理
封面图
•
2025-11-06
•
iOS开发
0
0
0
0
在 iOS 开发中,文件处理是一个非常常见的任务。iOS 应用程序通常需要读写文件、存储用户数据、处理图片、音频、视频等资源。以下是一些关于 iOS 文件处理的关键知识点和示例代码: --- ## 一、iOS 文件系统结构 iOS 的文件系统是**沙盒机制**的,每个应用都有自己的目录结构,主要包括以下几个目录: | 目录 | 说明 | |------|------| | `Documents` | 存放用户数据(如文档、数据库文件),会备份到 iCloud | | `Library/Caches` | 缓存文件,不会备份到 iCloud | | `Library/Preferences` | 用户偏好设置(通过 `NSUserDefaults` 或 `UserDefaults`) | | `tmp` | 临时文件,可能被系统清理 | --- ## 二、获取文件路径 在 Swift 中可以使用 `FileManager` 来获取路径: ```swift let fileManager = FileManager.default // 获取 Documents 目录 if let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first { print("Documents path: $documentsURL)") } // 获取 Caches 目录 if let cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first { print("Caches path: $cachesURL)") } ``` --- ## 三、文件操作 ### 1. 创建文件 ```swift let fileURL = documentsURL.appendingPathComponent("test.txt") do { try "Hello, iOS!".write(to: fileURL, atomically: true, encoding: .utf8) print("文件创建成功") } catch { print("写入失败:$error)") } ``` ### 2. 读取文件 ```swift do { let content = try String(contentsOf: fileURL, encoding: .utf8) print("文件内容:$content)") } catch { print("读取失败:$error)") } ``` ### 3. 删除文件 ```swift do { try fileManager.removeItem(at: fileURL) print("文件删除成功") } catch { print("删除失败:$error)") } ``` ### 4. 检查文件是否存在 ```swift if fileManager.fileExists(atPath: fileURL.path) { print("文件存在") } else { print("文件不存在") } ``` --- ## 四、处理图片、音视频等文件 ### 1. 保存图片到 Documents ```swift if let image = UIImage(named: "icon") { if let imageData = image.pngData() { do { try imageData.write(to: fileURL) print("图片保存成功") } catch { print("保存失败:$error)") } } } ``` ### 2. 从 Documents 加载图片 ```swift if let image = UIImage(contentsOfFile: fileURL.path) { imageView.image = image } ``` --- ## 五、使用 NSKeyedArchiver 和 NSKeyedUnarchiver(对象归档) ```swift // 保存对象 let data = NSKeyedArchiver.archivedData(withRootObject: user) try? data.write(to: fileURL) // 加载对象 if let data = try? Data(contentsOf: fileURL), let user = NSKeyedUnarchiver.unarchiveObject(with: data) as? User { print("加载成功:$user)") } ``` > ⚠️ 注意:Swift 中推荐使用 `Codable` 协议进行序列化。 --- ## 六、使用 Codable 进行 JSON 序列化 ```swift struct User: Codable { var name: String var age: Int } let user = User(name: "Alice", age: 25) // 写入 JSON 文件 let encoder = JSONEncoder() if let jsonData = try? encoder.encode(user) { try? jsonData.write(to: fileURL) } // 读取 JSON 文件 if let data = try? Data(contentsOf: fileURL), let loadedUser = try? decoder.decode(User.self, from: data) { print("加载成功:$loadedUser.name)") } ``` --- ## 七、文件管理工具类(Swift) 你可以创建一个简单的文件管理类来统一处理文件操作: ```swift class FileHandler { static func getDocumentsDirectory() -> URL { return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! } static func saveTextToFile(_ text: String, fileName: String) -> URL? { let fileURL = getDocumentsDirectory().appendingPathComponent(fileName) do { try text.write(to: fileURL, atomically: true, encoding: .utf8) return fileURL } catch { print("保存失败:$error)") return nil } } static func readTextFromFile(_ fileName: String) -> String? { let fileURL = getDocumentsDirectory().appendingPathComponent(fileName) do { return try String(contentsOf: fileURL, encoding: .utf8) } catch { print("读取失败:$error)") return nil } } } ``` --- ## 八、注意事项 - **不要将敏感数据存放在 `Caches` 目录**,因为它们可能被系统清理。 - **避免频繁写入 `Documents`**,以免影响性能。 - 使用 `UserDefaults` 存储小量数据,不适合大文件。 - 对于大文件(如视频、图片),建议使用 `URLSession` 下载并缓存到 `Caches`。 --- 如果你有具体的场景(比如读取 CSV 文件、处理 PDF、加密文件等),我可以提供更详细的代码示例。 是否需要我帮你实现某个特定功能?
上一篇:
Flutter 交织动画
下一篇:
iOS开发 地图开发
标题录入,一次不能超过6条
留言
评论