Swift 文件系统操作:完整指南

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

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

开始课程

Swift 文件系统操作:完整指南



文件和目录管理是 iOS 和 macOS 应用开发中的关键任务之一。在 Swift 中,用于文件系统操作的主要工具是 FileManager 类。本文将介绍如何创建、读取、写入、移动和删除文件,以及如何高效管理目录。所有代码示例均使用 Swift 编写,适用于 iOS 和 macOS 项目。



FileManager 基础



FileManager 是一个单例,提供与文件系统交互的接口。使用它只需获取实例:



let fileManager = FileManager.default


该类几乎可以执行任何操作:检查文件是否存在、获取属性、创建文件夹等。需要注意的是,所有文件系统操作都可能抛出错误,因此我们将使用 do-catch 结构。



目录操作



在创建文件之前,需要学会管理文件夹。下面介绍目录的基本操作。



检查目录是否存在



let documentsPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!let newFolderPath = documentsPath.appendingPathComponent("MyFolder")

if fileManager.fileExists(atPath: newFolderPath.path) { print("目录存在")} else { print("目录未找到")}


创建目录



do {    try fileManager.createDirectory(at: newFolderPath,                                     withIntermediateDirectories: true,                                     attributes: nil)    print("目录已创建")} catch {    print("创建目录错误: \\(error.localizedDescription)")}


withIntermediateDirectories 参数允许自动创建路径中所有缺失的文件夹。例如,如果要创建 Folder1/Folder2/Folder3,而 Folder1 不存在——它会被自动创建。



获取目录内容列表



do {    let contents = try fileManager.contentsOfDirectory(at: documentsPath,                                                        includingPropertiesForKeys: nil)    for item in contents {        print("找到元素: \\(item.lastPathComponent)")    }} catch {    print("读取目录错误: \\(error)")}


文件读写



在 Swift 中有多种读写数据的方法。下面介绍其中主要的几种。



写入文本文件



let text = "你好,世界!这是一个测试文件。"let filePath = documentsPath.appendingPathComponent("test.txt")

do { try text.write(to: filePath, atomically: true, encoding: .utf8) print("文件写入成功")} catch { print("写入错误: \\(error)")}


读取文本文件



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


处理二进制数据



// 写入let data = "Binary data example".data(using: .utf8)!let binaryPath = documentsPath.appendingPathComponent("data.bin")

do { try data.write(to: binaryPath, options: .atomic) print("二进制数据已写入")} catch { print("数据写入错误: \\(error)")}

// 读取do { let loadedData = try Data(contentsOf: binaryPath) print("读取了 \\(loadedData.count) 字节")} catch { print("数据读取错误: \\(error)")}


移动、复制和删除文件



文件管理不仅包括创建,还包括移动、复制和删除操作。

博客

书籍推荐