在 Swift 中,URL 类提供多种对路径进行操作和管理的方法。
常用方法
添加路径方法
1、appendingPathComponent(_:):用于在现有路径后添加新的路径组件,例如文件名或子目录。它可以确保路径的正确性,不会影响 URL 的其他部分。
// 拼接文件路径
let documentFileURL = URL.documentsDirectory.appendingPathComponent("example.txt")
// 结果示例: file:///path/to/Documents/example.txt
2、appending(path:):appending可以直接将字符串添加到 URL 后。它不会检查或规范路径分隔符,因此如果用来拼接路径或文件名,可能会产生错误的路径结构。
// 用于网络请求 URL 拼接查询参数
let baseURL = URL(string: "https://example.com/api")!
let fullURL = baseURL.appending(path:"endpoint")
// 结果: "https://example.com/apiendpoint" (这里不会自动处理分隔符)
适合拼接 URL 查询参数或直接添加 URL 字符串。
提示:appending(path:)是一个新的API,在拼接URL层面和appendingPathComponent是等价的,还支持拼接查询参数等多种功能。
3、appendingPathExtension(_:):URL后面添加文件扩展名。
let fileURL = URL.documentsDirectory.appendingPathComponent("example").appendingPathExtension("txt")
// 结果: file:///path/to/Documents/example.txt
可以动态切换扩展名,不需要手动修改整个文件名字符串。
删除路径方法
1、deletingLastPathComponent():返回一个新的URL,移除 URL 的最后一个路径组件(文件名或目录名)。
let directoryURL = fileURL.deletingLastPathComponent()
2、deletingPathExtension():删除 URL 的文件扩展名。
let baseURL = fileURL.deletingPathExtension()
// 例如,archive.tar.gz → archive.tar
获取路径方法
1、path:获取本地文件系统路径,仅对 file://URL 有意义,返回的是解码后的 POSIX 路径形式。
let url = URL(fileURLWithPath: "/Users/test/image 1.png")
url.path
// /Users/test/image 1.png
2、lastPathComponent:获取 URL 的最后一个路径组件(例如文件名)。
let lastComponent = fileURL.lastPathComponent // 获取文件名称 a.txt
3、pathExtension:获取 URL 的文件扩展名。
let extension = fileURL.pathExtension
4、relativePath:返回相URL的path部分,如果URL是相对URL。
URL(fileURLWithPath: "/a/b").relativePath // "/a/b"
URL(string: "a/b")!.relativePath // "a/b"
5、relativeString:返回构造URL时使用的原始字符串表示。
URL(string: "a/b")!.relativeString // "a/b"
URL(string: "file:///a/b")!.relativeString // file:///a/b
6、absoluteString:以字符串形式返回 URL 的完整路径。
let urlString = url.absoluteString // file:///Users/test/image%201.png
7、query:获取 URL的 query 解析部分。
let base = URL(string: "https://example.com/api?token=123")!
print(base.query) // "token=123"
判断路径方法
1、isFileURL:判断是否为文件路径。
let isURL = url.isFileURL
2、hasDirectoryPath:如果 URL 表示目录路径,返回 true。
let isDirectory = fileURL.hasDirectoryPath
3、checkResourceIsReachable():判断文件是否真实存在。
try url.checkResourceIsReachable()
其他方法
1、standardizingPath / standardizedFileURL:规范化路径分隔符,移除多余的 /,解析相对路径(如 ../)。
let url = fileURL.standardizingPath
let url = fileURL.standardizedFileURL
standardizedFileURL是新的API,相比standardizingPath更安全。
2、resourceValues(forKeys:):获取真实文件属性。
let values = try url.resourceValues(forKeys: [.isDirectoryKey, .fileSizeKey])
3、resolvingSymlinksInPath:解析路径中的符号链接。
let resolvedURL = fileURL.resolvingSymlinksInPath()
适合处理Finder拖入的路径。
