快速读取文件,iOS操场

通过search许多(许多!)快速的操场问题甚至制作这个代码,我仍然在挣扎。

我在包内容的Resources文件夹中放置了一个文本文件,它在运行库( /var/folders/ ... )生成的运行临时文件中显示为别名(链接)。

 import UIKit let bundle = NSBundle.mainBundle() let myFilePath = bundle.pathForResource("dict1", ofType: "txt") println(myFilePath) // <-- this is correct, there is a shortcut to the Resource file at this location var error:NSError? var content = String(contentsOfFile:myFilePath!, encoding:NSUTF8StringEncoding, error: &error) println(content!) // <-- this is *NOT* the file contents [EDIT: see later note] // Demonstrate there's no error if let theError = error { print("\(theError.localizedDescription)") } else { print("No error") } 

问题在于,在操场输出中显示的contentSome "apple\ngame\nhow\nswift\ntoken" ,而不是按预期方式显示的文件内容。

它find的文件,因为如果我改变文件名,它的错误。 有关获取文件内容的任何build议?

Xcode 6.1

编辑:所以, 实际的问题是,我不期望的操场输出(包括println )被转义。 加上疲劳和其他愚蠢,我相信当没有人存在的时候,就会有问题。

有趣的是,并非所有的东西在操场上都能逃脱:

 println("foo\nbar") // Outputs "foo\nbar", escaped println("\\n") // Outputs "\n", unescaped 

您可以尝试创build一个打开和保存文件的类:

更新: Xcode 7.2•Swift 2.1.1

 class File { class func open(path: String, encoding: NSStringEncoding = NSUTF8StringEncoding) -> String? { if NSFileManager().fileExistsAtPath(path) { do { return try String(contentsOfFile: path, encoding: encoding) } catch let error as NSError { print(error.code) return nil } } return nil } class func save(path: String, _ content: String, encoding: NSStringEncoding = NSUTF8StringEncoding) -> Bool { do { try content.writeToFile(path, atomically: true, encoding: encoding) return true } catch let error as NSError { print(error.code) return false } } } 

用法:File.save

 let stringToSave:String = "Your text" let didSave = File.save("\(NSHomeDirectory())/Desktop/file.txt", stringToSave) if didSave { println("file saved") } else { println("error saving file") } 

用法:File.open

 if let loadedData = File.open("\(NSHomeDirectory())/Desktop/file.txt") { println(loadedData) } else { println("error reading file") } 

如果您喜欢使用url(与我一样并由Apple推荐):

 class Url { class func open(url: NSURL) -> String? { do { return try String(contentsOfURL: url, encoding: NSUTF8StringEncoding) } catch let error as NSError { print(error.code) return nil } } class func save(urL: NSURL, fileContent: String) -> Bool { do { try fileContent.writeToURL(urL, atomically: true, encoding: NSUTF8StringEncoding) return true } catch let error as NSError { print(error.code) return false } } } 

我已经看到了使用TextEdit从.rtf文件创build的.txt文件的这个问题。

我在我的游乐场的资源文件夹中使用类似的代码加载了一个text.txt文件。 文件内容是“hello there”,通过改变扩展名将.rtf文件转换为.txt。

 let path = NSBundle.mainBundle().pathForResource("text", ofType: "txt")//or rtf for an rtf file var text = String(contentsOfFile: path!, encoding: NSUTF8StringEncoding, error: nil)! println(text) 

输出是:

{\ rtf1 \ ansi \ ansicpg1252 \ cocoartf1343 \ cocoasubrtf140 {\ fonttbl \ f0 \ fswiss \ fcharset0 Helvetica;} {\ colortbl; \ red255 \ green255 \ blue255;} \ margl1440 \ margr1440 \ vieww10800 \ viewh8400 \ viewkind0 \ pard \ tx720 \ tx1440 \ tx2160 \ tx2880 \ tx3600 \ tx4320 \ tx5040 \ tx5760 \ tx6480 \ tx7200 \ tx7920 \ tx8640 \ pardirnatural

\ f0 \ fs24 \ cf0 hello there}

所以“你好”是embedded式的。 这是一个.rtf文件中的所有布局信息的问题。

我回到了TextEdit并创build了一个真正的.txt文件。 打开文件后 – 格式化|制作纯文本

现在这个相同的代码给了控制台输出“你好”。

希望这可以帮助。