读取文件内容并获取值

时间:2015-09-07 13:20:17

标签: ios swift

我有一个函数可以将一些数字写入文件

fun writeNumToFile -> Void {
    //get Documents’ path
  let docPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last as? String
  let filePath = docPath.stringByAppendingPathComponent(“myFlie.txt”)

  //the count is NOT the count of elements in the array below.
  //think it as an independent constant.
  let count = 10
  //Write count to file
   String(count).writeToFile(filePath, atomically: false, encoding: NSUTF8StringEncoding, error: nil);

  //Write an array of numbers to file
  for idx in [1,2,3] {
   String(idx as! String).writeToFile(filePath, atomically: false, encoding: NSUTF8StringEncoding, error: nil);
  }
}

现在我想从文件中读取数字,我知道我可以通过以下方式阅读文件内容:

let fileContent = String(contentsOfFile: filePath, encoding: NSUTF8StringEncoding, error: nil)

但是如何才能获得count&获得内容后,[1,2,3]会回来吗?

1 个答案:

答案 0 :(得分:2)

您正在编写代码,就像使用低级文件i / o一样。你不是。您使用的writeToFile:atomically:方法使用新内容覆盖文件,而不是将数据附加到现有文件。第二次写入会删除第一次写入的内容。

NSArray支持writeToFile:atomically:方法,[String]数组应与NSArray互操作。

你应该能够简单地说:

let array = [1, 2, 3]
let ok = array .writeToFile(filePath, atomically: false)

然后,

let array = NSArray.contentsOfFile(filePath)

我说“应该能够”,因为我仍然在学习Swift与基础课程之间互动的微妙之处。

编辑:

如果您需要将多个离散的东西保存到文件中,请创建一个字典:

let someValue = 42
let anArray = [1, 2, 3]
let aDictionary = [
  "someValue": someValue, 
  "array": anArray]
let ok = aDictionary.writeToFile(filePath, atomically: false)

并阅读:

let aDictionary = NSDictionary(contentsOfFile: filePath)
let someValue = aDictionary["someValue"] as! Int
let anArray = aDictionary["array"] as! [Int]

无需单独保存阵列中的项目数。该数组能够从文件内容中重构自己,包括正确的元素数。

编辑#2:

请注意,iOS包含C文件i / o库,应该可以从Swift中调用。如果你是贪婪的惩罚,你可以使用fopen()fseek()fwrite()等来做你想做的事情。(但不要。这是更多的工作,更多的错误-prone,以及在iOS或Mac OS中执行此操作的非标准方式。)