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

时间:2014-09-15 10:55:27

标签: swift

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

我尝试了一些我可以通过Google找到的例子,但是他们给出了编译错误,例如这里的答案:Read and write data from text file 如果我稍微调整代码,它可以工作,但只能从项目中的特殊位置读取。

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

日Thnx

8 个答案:

答案 0 :(得分:33)

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

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

否则只需使用它:

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

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


更新:使用Xcode 7和Swift 2,这不再适用了。您现在可以使用

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

答案 1 :(得分: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
}

请注意data可能为零,因此您应该检查一下。

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

答案 2 :(得分:5)

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

答案 3 :(得分:3)

相对路径提示:

而不是这样做:
NSString("~/file.txt").stringByExpandingTildeInPath

你可以这样做:
    "\(NSHomeDirectory())/file.txt"

答案 4 :(得分:2)

您可能会发现此工具不仅可以读取Swift中的文件,还可以同时解析它:https://github.com/shoumikhin/StreamScanner

只需指定这样的文件路径和数据分隔符(有关更多选项,请参阅readme):

import StreamScanner

if let input = NSFileHandle(forReadingAtPath: "/file/path")
{
     let scanner = StreamScanner(source: input, delimiters: NSCharacterSet(charactersInString: ":\n"))  //separate data by colons and newlines

     while let field: String = scanner.read()
     {
        //use field
     }
}

希望,这有帮助。

答案 5 :(得分:1)

这适用于我在Swift 2.1,XCode7中获取位置并打印CSV的内容。 (您可以在Text Wrangler中创建一个简单的CSV)

override func viewDidLoad() {
    super.viewDidLoad()

    let location = NSString(string:"/Users/*Myusername*/Documents/myCSVfile.csv")
    let fileContent = try? NSString(contentsOfFile: location as String, encoding: NSUTF8StringEncoding)
    print(fileContent)

}

答案 6 :(得分:0)

使用Atomix的答案,这将适用于Swift 4:

let location = NSString(string: "~/test.txt").expandingTildeInPath    
let fileContent = try? NSString(contentsOfFile: location, encoding: String.Encoding.utf8.rawValue)

答案 7 :(得分:0)

迅速4:

datetime