使用Swift读取本地文件的简单方法?

eiv*_*dml 26 swift

我正在尝试学习新的Swift编程语言.它看起来很棒,但我很难做一些像读取本地.txt文件内容这样简单的事情.

我已经尝试了几个我可以通过Google找到的例子,但是它们给出了编译错误,比如这里的答案:从文本文件中读取和写入数据 如果我稍微调整一下代码,它可以工作,但只能从内部的特殊位置读取该项目.

为什么用Swift读取.txt文件就像使用Ruby一样简单?我将如何阅读位于的文件内容~/file.txt

日Thnx

Ato*_*mix 35

如果你的路径有波浪号,你可以试试这个:

let location = "~/file.txt".stringByExpandingTildeInPath
let fileContent = NSString(contentsOfFile: location, encoding: NSUTF8StringEncoding, error: nil)
Run Code Online (Sandbox Code Playgroud)

否则只需使用此:

let location = "/Users/you/Desktop/test.txt"
let fileContent = NSString(contentsOfFile: location, encoding: NSUTF8StringEncoding, error: nil)
Run Code Online (Sandbox Code Playgroud)

这为您提供了文件的字符串表示,我假设是您想要的.您可以使用NSData(contentsOfFile: location)获取二进制表示,但通常您可以为音乐文件而不是文本文件执行此操作.


更新:使用Xcode 7和Swift 2,这不再起作用了.你现在可以使用了

let location = NSString(string:"~/file.txt").stringByExpandingTildeInPath
let fileContent = try? NSString(contentsOfFile: location, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)


Gri*_*mxn 14

这可行:

let path = "~/file.txt"
let expandedPath = path.stringByExpandingTildeInPath
let data: NSData? = NSData(contentsOfFile: expandedPath)

if let fileData = data {
    let content = NSString(data: fileData, encoding:NSUTF8StringEncoding) as String
}
Run Code Online (Sandbox Code Playgroud)

注意data可能是零,所以你应该检查一下.

编辑:不要忘记有条件的展开 - 看起来更好;)

  • `data`是可选的.它被宣布为上面一行.引用"快速浏览",本书的第一章:"你可以使用if和let一起处理可能缺失的值.这些值表示为可选项.可选值包含值或包含nil表示缺少值.在值的类型后面写一个问号(?),将值标记为可选." (4认同)

Ami*_*n72 6

    let file = "/Users/user/Documents/text.txt"
    let path=URL(fileURLWithPath: file)
    let text=try! String(contentsOf: path)
Run Code Online (Sandbox Code Playgroud)

  • 这值得更多+1。简单、干净、不需要 NS。我错过了什么吗?有人告诉我这是否有缺陷? (2认同)