在发布这个相当简单的问题之前,我至少花了 2 个小时尝试。当 json 文件位于应用程序包内时,以下代码有效。
if let file = Bundle.main.url(forResource: "data", withExtension: "json") {....
我正在这样读取json文件...
let myData = try Data(contentsOf: file as URL)
我无法从“/Library/Application Support/AppFolder/data.json”访问该文件的相同副本。
以下不起作用
let filepath = "/Library/Application Support/AppFolder/data.json"
if let file = NSURL(string: filepath) {...
除了文件系统中的 URL 必须始终使用
NSURL(fileURLWithPath...)
创建之外,建议使用专用 API 检索特定的系统文件夹:
let applicationSupportFolderURL = try! NSFileManager.defaultManager().URLForDirectory(.ApplicationSupportDirectory,
inDomain: .LocalDomainMask,
appropriateForURL: nil,
create: false)
let jsonDataURL = applicationSupportFolderURL.URLByAppendingPathComponent("AppFolder/data.json")
或者在 Swift 3 中(它要短得多)
let applicationSupportFolderURL = try! FileManager.default.url(for: .applicationSupportDirectory,
in: .localDomainMask,
appropriateFor: nil,
create: false)
let jsonDataURL = applicationSupportFolderURL.appendingPathComponent("AppFolder/data.json")
或者 – 在 iOS 16+ 和 macOS 13+ 中 – 仍然更方便
let jsonDataURL = URL.applicationSupportDirectory.appending(path: "AppFolder/data.json")
尝试:
NSURL.init(fileURLWithPath: "your_path")
string:
生成一个表示给定字符串的 NSURL。所以像“http://www.google.com”这样的字符串和URL代表http://www.google.com。
fileURLWithPath:
采用路径而不是 URL,并生成一个 NSURL,该 NSURL 使用 file:// URL 表示路径。因此,如果您给它 /foo/bar/baz
,则 URL 将代表 file:///foo/bar/baz
。