我才刚刚开始学习Swift,并且要自学,我正在制作一个简单的命令行应用程序。最终它将连接到在线数据源,但最初我想从文件中加载数据。我已经看过各种有关在Swift中读取文件内容的指南,但似乎没有一个对我有用。到目前为止,这是我的应用程序:
char tmp1[seq_cnt][5+1];
char tmp2[seq_cnt][5+1];
运行它会输出:
import Foundation
// Set the file path
let path = "/Users/username/workspace/Swift/sis/sis/data.json"
do {
// Get the contents
let contents = try String(contentsOfFile: path, encoding: .utf8)
print(contents)
}
catch let error as NSError {
print("Ooops! Something went wrong: \(error)")
}
但是在终端上:
Ooops! Something went wrong: Error Domain=NSCocoaErrorDomain Code=260 "The file “data.json” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users/username/workspace/Swift/sis/sis/data.json, NSUnderlyingError=0x100e19a50 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
(是的,我以某种方式放宽了权限,以防万一是问题所在)
我注意到的唯一异常现象(除了不正确的断言该文件不存在之外)是,当我将XCode输出的路径复制并粘贴到iTerm2中时,它将在每个路径组件之间放置空格:
(粘贴为图像,然后将其复制并粘贴回此形式似乎隐藏了空格-无论如何这都可能无关紧要)
任何帮助弄清楚这一点的人将不胜感激!
答案 0 :(得分:1)
如果您的命令行应用程序被沙盒化,您将无法读取。您可以做的是将此文件添加到您的项目中,并通过在身份检查器中查看文件的完整路径来设置文件路径。
let path = "/Users/snx/EmailReplacer/EmailReplacer/shared_domains_staging.json"
do {
let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves)
if let jsonResult = jsonResult as? Dictionary<String, AnyObject> {
print(jsonResult)
}
} catch {
print(error)
}
答案 1 :(得分:0)
我复制了您的代码,将sample json文件下载到了我的桌面上,并将其重命名为example_ 1.json(我在文件名中包含一个空格)。
import Foundation
// Set the file path
let path = "/Users/username/Desktop/example_ 1.json"
do {
// Get the contents
let contents = try String(contentsOfFile: path, encoding: .utf8)
print(contents)
}
catch let error as NSError {
print("Ooops! Something went wrong: \(error)")
}
它成功打印了文件。当我将内容定义为NSString时,它也起作用。
let contents = try NSString(contentsOfFile: path,
encoding: String.Encoding.ascii.rawValue)
我正在使用 Swift 4.2.1