Swift 从应用程序包外部的文件中读取 json

问题描述 投票:0回答:2

在发布这个相当简单的问题之前,我至少花了 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) {...
json swift nsdata nsurl
2个回答
2
投票

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

0
投票

尝试:

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

© www.soinside.com 2019 - 2024. All rights reserved.