Swift从Application bundle之外的文件读取json

scyqe7ek  于 2023-09-30  发布在  Swift
关注(0)|答案(2)|浏览(123)

我花了至少两个小时的时间来尝试,然后才发布了这个相当简单的问题。下面的代码在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) {...
5vf7fwbs

5vf7fwbs1#

除了文件系统中的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")
hwamh0ep

hwamh0ep2#

尝试:NSURL.init(fileURLWithPath: "your_path")
string:生成一个NSURL,表示给定的字符串。所以像“http://www.google.com”这样的字符串和URL表示http://www.google.com
fileURLWithPath:接受一个路径,而不是URL,并生成一个NSURL,它使用file://URL表示路径。所以如果你给予它/foo/bar/baz,URL将表示file:///foo/bar/baz

相关问题