FileManager 是 Swift 中的一个类,用于管理和操作文件系统。它提供了多种方法,可以对文件、目录、属性等进行创建、读取、写入、复制、移动和删除等操作。FileManager 非常适合在应用中管理本地文件,例如保存用户数据、读取配置文件或缓存文件。
常见用途
1、获取文件路径:如应用的文档目录、缓存目录等。
2、检查文件是否存在。
3、创建、复制、移动、删除文件或目录。
4、读取文件的属性。
5、列出目录的内容。
常见使用方法
以下是一些 FileManager 常用的功能示例。
1、获取应用沙盒中的目录路径
let fileManager = FileManager.default
// 获取应用的文档目录路径
if let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
print("Documents directory path: \(documentsURL.path)")
}
// 获取缓存目录路径
if let cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first {
print("Caches directory path: \(cachesURL.path)")
}
fileManager.urls(for: .documentDirectory, in: .userDomainMask):
fileManager 是 FileManager 的实例,FileManager 用于管理文件和目录。
urls(for:in:) 是 FileManager 的一个方法,用来查找指定的系统目录。
.documentDirectory:表示“文档”目录,也就是 Documents 文件夹。在 iOS 应用中,这个目录是专门用来存储用户可以访问的文档文件的。
.userDomainMask:表示在用户的主目录下查找文件夹,通常就是应用的沙盒区域(例如 ~/Documents)。
该方法返回一个包含 URL 的数组,因为可能存在多个匹配的路径(但通常在 iOS 上,Documents 目录只有一个)。
.first:
调用了 first 属性,意在从返回的 URL 数组中获取第一个 URL(通常也是唯一的一个)。
通过使用 first,可以直接得到 Documents 目录的 URL(如果存在),以避免直接操作数组的繁琐性。
2、检查文件或目录是否存在
let filePath = documentsURL.appendingPathComponent("example.txt").path
if fileManager.fileExists(atPath: filePath) {
print("File exists")
} else {
print("File does not exist")
}
3、创建文件
let fileURL = documentsURL.appendingPathComponent("example.txt")
let contents = "Hello, World!".data(using: .utf8)
fileManager.createFile(atPath: fileURL.path, contents: contents, attributes: nil)
fileManager.createFile(atPath:contents:attributes:) 是 FileManager 类中的一个方法,用来在指定路径创建文件。该方法创建文件时可以设置内容,并提供文件的属性选项。
1、atPath: fileURL.path:
这里的 fileURL.path 是文件路径的字符串格式。
fileURL 是一个 URL,代表文件在系统中的完整路径。fileURL.path 会将 URL 转换为系统路径字符串,以便 FileManager 识别。
2、contents: contents:
contents 是要写入文件的 Data 类型的数据。
在这段代码中,contents 是已经准备好的数据(例如 Hello, World! 的 UTF-8 编码数据)。如果 contents 为 nil,则会创建一个空文件。
3、attributes: nil:
attributes 是文件的属性字典,允许你指定文件的创建日期、权限等。
这里传入了 nil,表示使用系统默认的文件属性。
方法功能
createFile(atPath:contents:attributes:) 方法会在指定的路径下创建文件,如果该路径下已经存在同名文件,则会替换原文件。创建的文件会包含传入的内容数据,或者为空文件(如果 contents 为 nil)。
4、创建目录
let directoryURL = documentsURL.appendingPathComponent("NewDirectory")
do {
try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil)
print("Directory created")
} catch {
print("Failed to create directory: \(error)")
}
5、读取文件内容
if let fileData = fileManager.contents(atPath: fileURL.path),
let contentString = String(data: fileData, encoding: .utf8) {
print("File content: \(contentString)")
}
6、复制文件
let destinationURL = documentsURL.appendingPathComponent("example_copy.txt")
do {
try fileManager.copyItem(at: fileURL, to: destinationURL)
print("File copied")
} catch {
print("Failed to copy file: \(error)")
}
7、移动文件
let destinationURL = documentsURL.appendingPathComponent("example_moved.txt")
do {
try fileManager.moveItem(at: fileURL, to: destinationURL)
print("File moved")
} catch {
print("Failed to move file: \(error)")
}
8、删除文件
do {
try fileManager.removeItem(at: fileURL)
print("File deleted")
} catch {
print("Failed to delete file: \(error)")
}
9、获取文件属性
do {
let attributes = try fileManager.attributesOfItem(atPath: fileURL.path)
if let fileSize = attributes[.size] as? Int64 {
print("File size: \(fileSize) bytes")
}
if let creationDate = attributes[.creationDate] as? Date {
print("Creation date: \(creationDate)")
}
} catch {
print("Failed to get file attributes: \(error)")
}
10、列出目录内容
do {
let contents = try fileManager.contentsOfDirectory(atPath: documentsURL.path)
for item in contents {
print("Item in directory: \(item)")
}
} catch {
print("Failed to list directory contents: \(error)")
}
11、临时目录
let fileManager = FileManager.default
let destinationURL = fileManager.temporaryDirectory.appendingPathComponent("downloadedFile")
do {
try fileManager.moveItem(at: localURL, to: destinationURL)
print("文件已保存到:\(destinationURL)")
} catch {
print("移动文件时出错:\(error)")
}
总结
FileManager 是 Swift 中强大的文件管理工具类,适用于文件的增删改查等操作,尤其在需要对本地数据进行管理的应用中非常实用。